1.概述
shell编程:
- shell语言是脚本语言,解释型语言。
- shell语言 是通过bash下进行解释运行的
静态语言 编译型语言 需要将代码通过编译器编译成二进制文件
属于强类型(变量) 代表 c c++ java c#
动态语言 解释型语言 不要编译,在环境中,边解释边执行
属于弱类型(变量) 代表 python asp .net php perl shell
2.变量
在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储,即使你将整数和小数赋值给变量,它们也会被视为字符串。
变量赋值
VAR_NAME=VALUE
VAR_NAME 是变量名,VALUE 是赋给变量的值。赋值号的周围不能有空格
如果 value 不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;
如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的
’ ’ 单引号 表示强引用 ''内的变量和命令原样输出
" " 双引号 表示弱引用 ""内的变量和命令先解析后在输出
将命令的结果赋值给变量
VAR_NAME=`COMMAND`
VAR_NAME=$(COMMAND)
使用变量
$VAR_NAME
${VAR_NAME} 为了帮助解释器识别变量的边界
NAME=para
echo "Hello, my friend zhou${NAEM}"
bash变量的类型
- 本地变量(局部变量)
- 环境变量
- 位置变量
- 特殊变量
1.本地变量
VARNAME=VALUE
作用域:整个脚本进程
local VARNAME=VALUE
使用local关键词 局部变量 作用域:为当前代码段(函数)
详解见https://www.cnblogs.com/JiangLe/p/4846818.html
2.环境变量
export VARNAME=VALUE
作用域为当前shell进程及其子进程
注:脚本在执行时会启动一个子shell进程:
- 命令行中启动脚本,会继承当前shell的环境变量
- 系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
3.位置变量
$1,$2,…
表示 通过命令行传入的参数值
4.特殊变量
- $? 保存上一命令执行状态返回值
程序执行: 两类返回值
程序的执行结果(在标准输出输出的内容)
程序状态返回码(0-255) 0-正确执行 1-255 错误执行 - $0 当前脚本的文件名
- $# 传递给脚本的参数个数
-
∗
/
*/
∗/@ 传递给脚本的所有参数
但是当它们被双引号(" “)包含时,
“$*” 会将所有的参数作为一个整体,以”$1 $2 … n " 的 形 式 输 出 所 有 参 数 ; " n"的形式输出所有参数; " n"的形式输出所有参数;"@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 - $$ 当前shell进程ID
撤销变量
unset VARNAME
查看当前shell变量
set(环境变量+本地变量)
env,printenv,export(当前shell的环境变量)
将变量的添加
VARNAME=$VARNAME:VALUE1
常用的就是路径PATH的添加
PATH=$PATH:.
定义整型变量
declare -i 变量
declare -x 变量 声明为环境变量
declare -i SUM=0
shell进行算术运算
1.let 算术表达式
let C=$A+$B
2.$[算术表达式]
C=$[$A+$B]
3.$((算术表达式))
C=$(($A+$B))
4.expr 算术表达式,表达式中各操作数及运算符之间有空格,而且使用命令引用
C=`expr $A + $B`
3.总结
以上都是记录型的内容,只是为了记录。真正能记住,应该是遇到具体的问题之后,回过头来查看,才会记住某一个点。不过这些都是基石,接下去的shell编程尽量更加精彩。