Linux学习笔记-Shell脚本基本语法-09.05

Shell脚本基本语法

Shell中的数值运算及运算方式差异

expr数值运算工具
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
#给变量aa和变量bb赋值
[root@localhost ~]# dd=$(expr $aa + $bb)

dd的值是aa和bb的和。注意数字和运算符之间必须有空格,出现在语句中要加反引号
另外两种表达方式

$((运算式))”或“$[运算式]”
[root@localhost ~]# aa=$(( (11+3)*3/2 ))
#虽然乘和除的优先级高于加,但是通过小括号可以调整运算
优先级
[root@localhost ~]# bb=$(( 14%3 ))
#14不能被3整除,余数是2
[root@localhost ~]# cc=$(( 1 && 0 ))
#逻辑与运算只有想与的两边都是1,与的结果才是1,
否则与的结果是0

变量表达式

1、条件判断命令test
test n1 -参数 n2(或 –参数 表达式)
真返回0,假返回1

(1)整数比较

-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 逻辑或
逻辑非

if分支

if [ $# -eq 0 ]
then
echo “输入了0个参数”
elif [ $# -gt 1 ]
then echo “输入了多个参数”
else echo “输入了1个参数”
fi

注意:if语句后面接then,结尾是用fi结尾

case

case$#in
0) echo “输入了0个参数” ;;
1) echo “输入了1个参数” ;;
*) echo “输入了多个参数”;;
esac

每个分支条件后必须以两个分号结尾

循环结构

for循环

for i in {1..20}/代码
do
代码块
done

read

read 变量1 [变量2 …]

可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。
如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;
如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。
-p:指定读取值时的提示符;

Shell中的函数

shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数
函数由两部分组成:
函数标题
函数体
标题是函数名。函数体是函数内的命令集合。标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用相应的shell
定义函数的格式为:

函数名()
{
命令1
. . .
}

可在函数名前加上关键字f u n c t i on,这取决于使用者。
所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。上面的例子中,函数名为hello,函数体包含一个echo语句,反馈当天日期。

Shell数组

数组和关联数组

数组定义

可以在单行中使用一列值来定义一个数组:

array_var = (1 2 3 4 5 6)

另外,还可以将数组定义成一组“索引-值”:

array_var[0]="test1"
array_var[1]="test2"
array_var[2]="test3"
array_var[3]="test4"
array_var[4]="test5"

打印出特定索引的数组元素内容:

echo ${array_var[0]}
test1
index=4
echo ${array_var[$index]}
test5

以清单形式打印出数组中的所有值:

echo ${array_var[*]}
test1 test2 test3 test4 test5

也可以这样使用

echo ${array_var[@]}
test1 test2 test3 test4 test5

打印数组长度:

echo ${#array_var[*]}
5
关联数组

shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素。这种数组叫做关联数组(associative array)。
关联数组的下标和值称为键值对,它们是一一对应的关系。在关联数组中,键是唯一的,值可以不唯一。
定义关联数组
shell 的关联数组和 shell 的下标数组在定义和使用上完全一样,只是在索引上有区别。
需要注意的是,在使用关联数组之前,需要使用命令declare -A array 进行显示声明
实例

name=(jim tom lucy)
declare -A phone
phone=([jim]=135 [tom]=136 [lucy]=158)
for i in `eval echo {0..$((${#name[*]}-1))}`
do
echo ${name[i]} phone number is
${phone["${name[i]}"]}
done

在命令提示符下输入 ./test.sh,执行结果如下:
jim phone number is 135
tom phone number is 136
lucy phone number is 158
语法:
${!array[*]} 取关联数组所有键
${!array[@]} 取关联数组所有键
${array[*]} 取关联数组所有值
${array[@]} 取关联数组所有值
${#array[*]} 关联数组的长度
${#array[@]} 关联数组的长度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值