一、传递参数
1、在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。
n 代表一个数字,0 为执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推
#以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径): #!/bin/bash echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; 为脚本设置可执行权限,并执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 1 2 3 # 结果 执行的文件名:./test.sh 第一个参数为:1 第二个参数为:2 第三个参数为:3
2、其他特殊符号:
$# 传递到脚本的参数个数、$* 或 $@ 所有向脚本传递的参数、$$ 脚本运行的当前进程ID号、$! 后台运行的最后一个进程的ID号、
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
二、shell 运算符
1、算术、关系、布尔、字符串、文件测试运算符。
2、原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
#两个数相加(注意使用的是反引号 ` 而不是单引号 ') #!/bin/bash val=`expr 2 + 2` echo "两数之和为 : $val"
两点注意:
(1)表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
(2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
3、算术运算符:
#假定变量 a 为 10,变量 b 为 20: `expr $a + $b` #30 `expr $a - $b` #-10 `expr $a \* $b` # 200 `expr $b / $a` # 2 `expr $b % $a` #0 取余 a=$b # 赋值 - 将把变量 b 的值赋给 a [ $a == $b ] # false - == 相等。用于比较两个数字,相同则返回 true [ $a != $b ] # true - != 不相等。用于比较两个数字,不相同则返回 true
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
4、关系运算符:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
-eq 检测两个数是否相等,相等返回 true。
-ne 检测两个数是否不相等,不相等返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。
5、布尔运算符 —— ! 非运算、-o 或运算、-a 与运算
6、逻辑运算符 —— && 逻辑的 AND、|| 逻辑的 OR
7、字符串运算符:
= 检测两个字符串是否相等、 != 检测两个字符串是否不相等、
-z 检测字符串长度是否为0,为0返回 true、 -n 检测字符串长度是否不为 0
$ 检测字符串是否为空,不为空返回 true
8、文件测试运算符:用于检测 Unix 文件的各种属性。
-d file 检测文件是否是目录、 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件)、
-r file 检测文件是否可读、 -w file 检测文件是否可写、 -x file 检测文件是否可执行
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true、 -e file 检测文件(包括目录)是否存在,如果是,则返回 true
三、echo 命令 - 用于字符串的输出
#显示普通字符串: echo "It is a test" #显示转义字符: echo "\"It is a test\""
1、显示变量:read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo "$name It is a test" #以上代码保存为 test.sh,name 接收标准输入的变量,结果将是: [root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出
2、-e 用于开启转义
#显示换行 echo -e "OK! \n" # -e 开启转义 \n 换行 #显示不换行 echo -e "OK! \c" # -e 开启转义 \c 不换行
3、显示结果定向至文件
echo "It is a test" > myfile
4、原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"' #输出结果: $name\"
5、显示命令执行结果
echo `date` #注意: 这里使用的是反引号 `, 而不是单引号 '。 #结果将显示当前日期