三、简单四则运算
算术运算:默认情况下,shell就只能支持简单的整数运算
运算内容:加(+)、减(-)、乘(*)、除(/)、求余数(%)
1. 四则运算符号
表达式 | 举例 |
$(( )) | echo $((1+1)) |
$[ ] | echo $[10-5] |
expr | expr 10 / 5 |
let | n=1;let n+=1 等价于 let n=n+1 |
2.了解i++和++i
对变量的值的影响
[root~]#i=1[root~]#leti++[root~]#echo$i2[root~]#j=1[root~]#let++j[root~]#echo$j2
对表达式的值的影响
[root~]#unsetij[root~]#i=1;j=1[root~]#letx=i++先赋值,再运算[root~]#lety=++j先运算,再赋值[root~]#echo$i2[root~]#echo$j2[root~]#echo$x1[root~]#echo$y2
四、扩展补充
1. 数组定义
㈠ 数组分类
普通数组:只能使用整数作为数组索引(元素的下标)
关联数组:可以使用字符串作为数组索引(元素的下标)
㈡ 普通数组定义
一次赋予一个值
数组名[索引下标]=值array[0]=v1array[1]=v2array[2]=v3array[3]=v4
一次赋予多个值
数组名=(值1值2值3 ...) array=(var1var2var3var4) array1=(`cat/etc/passwd`) 将文件中每一行赋值给array1数组array2=(`ls/root`) array3=(harryamyjack"Miss Hou") array4=(1234"hello world" [10]=linux)
㈢ 数组的读取
${数组名[元素下标]} echo${array[0]} 获取数组里第一个元素echo${array[*]} 获取数组里的所有元素echo${#array[*]} 获取数组里所有元素个数echo${!array[ ]} 获取数组元素的索引下标echo${array[ ]:1:2} 访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素查看普通数组信息:[root~]#declare-a
㈣ 关联数组定义
①首先声明关联数组
declare-Aasso_array1declare-Aasso_array2declare-Aasso_array3
② 数组赋值
一次赋一个值
数组名[索引or下标]=变量值#asso_array1[linux]=one#asso_array1[java]=two#asso_array1[php]=three
一次赋多个值
#asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")
查看关联数组
#declare-Adeclare-Aasso_array1='([php]="three" [java]="two" [linux]="one" )'declare-Aasso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'
获取关联数组值
#echo${asso_array1[linux]} one#echo${asso_array1[php]} three#echo${asso_array1[*]} threetwoone#echo${!asso_array1[*]} phpjavalinux#echo${#asso_array1[*]} 3#echo${#asso_array2[*]} 4#echo${!asso_array2[*]} name3name2name1name4
其他定义方式
[rootshell05]#declare-Abooks[rootshell05]#letbooks[linux]++[rootshell05]#declare-A|grepbooksdeclare-Abooks='([linux]="1" )'[rootshell05]#letbooks[linux]++[rootshell05]#declare-A|grepbooksdeclare-Abooks='([linux]="2" )'
2. 其他变量定义
取出一个目录下的目录和文件:dirname和 basename
#A=/root/Desktop/shell/mem.txt#echo$A/root/Desktop/shell/mem.txt#dirname$A取出目录/root/Desktop/shell#basename$A取出文件mem.txt
变量"内容"的删除和替换
一个“%”代表从右往左去掉一个/key/两个“%%”代表从右往左最大去掉/key/一个“#”代表从左往右去掉一个/key/两个“##”代表从左往右最大去掉/key/举例说明:#url=www.taobao.com#echo${#url} 获取变量的长度#echo${url#*.} #echo${url##*.} #echo${url%.*} #echo${url%%.*}
以下了解,自己完成
替换:/和//1015echo${url/ao/AO} 1017echo${url//ao/AO} 贪婪替换替代:-和 :-+和:+1019echo${abc-123} 1020abc=hello1021echo${abc-444} 1022echo$abc1024abc=1025echo${abc-222} ${变量名-新的变量值} 或者${变量名=新的变量值} 变量没有被赋值:会使用“新的变量值“替代变量有被赋值(包括空值):不会被替代1062echo${ABC:-123} 1063ABC=HELLO1064echo${ABC:-123} 1065ABC=1066echo${ABC:-123} ${变量名:-新的变量值} 或者${变量名:=新的变量值} 变量没有被赋值或者赋空值:会使用“新的变量值“替代变量有被赋值:不会被替代1116echo${abc=123} 1118echo${abc:=123} [root~]#unsetabc[root~]#echo${abc:+123} [root~]#abc=hello[root~]#echo${abc:+123} 123[root~]#abc=[root~]#echo${abc:+123} ${变量名+新的变量值} 变量没有被赋值或者赋空值:不会使用“新的变量值“替代变量有被赋值:会被替代[root~]#unsetabc[root~]#echo${abc+123} [root~]#abc=hello[root~]#echo${abc+123} 123[root~]#abc=[root~]#echo${abc+123} 123${变量名:+新的变量值} 变量没有被赋值:不会使用“新的变量值“替代变量有被赋值(包括空值):会被替代[root~]#unsetabc[root~]#echo${abc?123} -bash: abc: 123[root~]#abc=hello[root~]#echo${abc?123} hello[root~]#abc=[root~]#echo${abc?123} ${变量名?新的变量值} 变量没有被赋值:提示错误信息变量被赋值(包括空值):不会使用“新的变量值“替代[root~]#unsetabc[root~]#echo${abc:?123} -bash: abc: 123[root~]#abc=hello[root~]#echo${abc:?123} hello[root~]#abc=[root~]#echo${abc:?123} -bash: abc: 123${变量名:?新的变量值} 变量没有被赋值或者赋空值时:提示错误信息变量被赋值:不会使用“新的变量值“替代说明:?主要是当变量没有赋值提示错误信息的,没有赋值功能