shell脚本语法

一、数值运算

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[@]}         关联数组的长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值