一、数值运算
1)expr数值运算工具
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
#给变量aa和变量bb赋值
[root@localhost ~]# dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两
侧必须有空格
2)表达式求值:
$ expr1 + 3
$ expr2 –1
$ expr1 \* 3 使用*要加转义符
$ echo `expr1 + 3`
注意:表达式中,数字和运算符指教要有空格,出现在语句中要加反引号
3)“$((运算式))”或“$[运算式]”
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# ff=$(( $aa+$bb ))
[root@localhost ~]# gg=$[ $aa+$bb ]
二、判断式及控制流程语句
1)条件判断命令test
test n1 -参数n2(或–参数表达式)
真返回0,假返回1。
test 1–lt4#判断1<4
echo $?#结果为0
·test语句的等价形式[ 1 –lt4 ]
可用中括号代替test,把表达式括起来实现判断
注意表达式与中括号间有空格。
-lt小于
-le小于等于
-gt大于
-ge大于等于
-eq等于
-ne不等
2)文件测试
-f存在且是普通文件
-d存在且是目录
-s存在且字节数大于0
-r存在且可读
-w存在且可写
-x存在且可执行
3)字符串测试
test s 字符串s非空
test s1 = s2字符串s1等于s2
test s1 != s2字符串s1不等于s2
test-z s字符串长=0,即为空串
test -n字符串长>0
4)其他参数
-a逻辑与
-o逻辑或
!逻辑非
5)分支结构
if分支
if [ $# -eq0 ]
then
echo “输入了0个参数”
elif[ $# -gt 1 ]
then echo “输入了多个参数”
else echo “输入了1个参数”
fi
case
case “$#” in
0)echo “输入了0个参数”;;
1)echo “输入了1个参数”;;
*)echo “输入了多个参数”;;
esac
每个分支条件后必须以两个分号结尾
6)循环结构
for 例子——输出100内10的倍数
#for iin {1..9} #大括号中不能有变量
for iin `seq1 9`
do
echo `expr$i\* 10`
done
或写echo $(expr$i\* 10)
注:如果使用这种方式的for iin {10..1} #在大括号中不能用变量
乘号前加转义符,
与数字间要有空格。
7)read 变量1 [变量2 …]
可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。
如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;
如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。
-p:指定读取值时的提示符;
三、shell中的函数
1)定义函数
定义函数的格式为:函数名(){命令1. . .}
函数名(){命令1. . .}
两者方式都可行。如果愿意,可在函数名前加上关键字f u n c t io n,这取决于使用者。
f u n c t io n 函数名(){ ...}
所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
2)参数可以传递给函数,并由脚本进行访问:
fnamearg1 arg2;#传递参数
以下是函数fname的定义:
fname()
{
echo $1,$2; #访问参数1和参数2
echo "$@"; #以列表的方式一次性打印所有参数
echo "$*"; #类似于$@,但是参数被作为单个实体
return 0; #返回值
}
Shell中的函数
四、shell数组
1)数组定义
可以在单行中使用一列值来定义一个数组:
array_var= (1 2 3 4 5 6)
#这些值将会存储在以0为起始索引的连续位置上
另外,还可以将数组定义成一组“索引-值”:
array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"
array_var[3]="test4"
array_var[4]="test5"
2)打印出特定索引的数组元素内容:
echo ${array_var[0]}
test1
index=4
echo ${array_var[$index]}
test5
3)以清单形式打印出数组中的所有值:
echo ${array_var[*]}
test1 test2 test3 test4 test5
也可以这样使用
echo ${array_var[@]}
test1 test2 test3 test4 test5
4)打印数组长度:
echo ${#array_var[*]}
5
6)语法 描述
${!array[*]} 取关联数组所有键
${!array[@]} 取关联数组所有键
${array[*]} 取关联数组所有值
${array[@]} 取关联数组所有值
${#array[*]} 关联数组的长度
${#array[@]} 关联数组的长度