这里讲的Shell是Linux Shell,基本的Linux shell命令请见Linux命令行基础
为了方便学习,教程中把执行代码后打印在屏幕上的信息,附在代码后边,前边加上两个#号及两个空格。练习时不用输入#号及其后边的内容。比如:
echo "欢迎一起学习Shell!" ## 欢迎一起学习Shell!
这里欢迎一起学习Shell!就是echo “欢迎一起学习Shell!”这条命令执行后打印到屏幕上的信息。 如下:
在$后边输入命令,出现$表示可以输入新的命令了。
变量名称只能有字母、数字、下划线组成,不能以数字开头,区分大小写。变量名前加$启用变量,必要时用{}限定变量名,比如
v_1="W h" v=Lab echo $v_1 ## W h echo $v+Name ## Lab+Name echo ${v}_Name ## Lab_Name echo $v_Name ## echo $v_1_Name ## echo ${v_1}_Name ## W h_Name
将W h字符串赋值给叫v_1的变量,等号两边不能有空格。左边没有引号。右边字符串中无空格时,引号可以省略。$符号接变量名就能调出值。变量名由字符、数字和下划线组成,不能以数字开头。$后边截止到允许的字符为止,所有字符会被当做一个变量名,会混淆的时候使用花括号限定变量名的范围。比如${v}_Name就是取出变量v和字符串_Name连起来, 而$v_Name是取出叫v_Name的变量,如上例子中未加定义,所以echo $v_Name得到一个空行。
比如可以把需要反复使用的一长串字符串赋值给一个变量,以后调用就会很方便。将命令赋值给一个变量,然后直接执行。
Wh=/home/wanghong ls $Wh goWh="cd $Whome" $goWh
使用readonly定义设置只读变量,这样的变量不能被重新赋值,重新赋值就会提示“只读变量”
readonly Wh=/home/wanghong echo $Wh ## /home/wanghong Wh=qita ## bash: Wh: readonly variable
使用双小括号$((算式))来执行算式,得到值。可以把计算结果赋给变量,也可以直接用计算结果。
X=$((1+5)) echo $X ## 6 echo $((1+5)) ## 6
shell只能进行整数的运算。要进行浮点数计算,可以使用awk
awk 'BEGIN{print 1/3}' ## 0.333333
可以进行加(+)减(-)乘(*)除(/),以及指数运算(**)、取模(%)。
echo $((10%3)) ## 1 echo $((10**3)) ## 1000 echo $((10/3)) ## 3 echo $((10 - 3)) ## 7 echo $((10 * 3)) ## 30
x++表示在用x的值之后x的值+1,++x表示先+1之后再用x的值。如果一开始没有给xx赋过值,那x++中的x就从0开始:
echo $x ## echo $((x++)) ## 0 echo $x ## 1 echo $((x++)) ## 1 echo $x ## 2 echo $x ## 2 echo $((x++)) ## 2 echo $((x++)) ## 3 echo $((x++)) ## 4 echo $x ## 5 echo $x ## 5 echo $((++x)) ## 6 echo $((++x)) ## 7 echo $((++x)) ## 8 echo $((++x)) ## 9
以上的例子一开始没有定义x,因此第一个echo得到空行,然后x++就自动给x一个值,那就0。然后执行完echo $((x++)) 上一步之后,x已经被加上了1。
x--的作用则是每次减去1
echo $((x--)) echo $((x--)) echo $x
在shell里,0表示false,1或者非零值表示true,
echo $((10 >= 9)) #比较, >=, >, <, <=, ==, !=, 这个返回的值是布尔值,1和0,非零值都是1 echo $((10 && 3)) #逻辑运算, AND, 逻辑值分为0和非零 echo $((10 && -3)) # echo $((10 && 0)) echo $((10 || 3)) #逻辑运算, OR echo $((10 || -3)) echo $((10 || 0))
字符串连接只需要连续写就可以了
A=张 B=三 echo $A$B ## 张三 echo $A $B ## 张 三 echo $A三 ## 张三 echo $AB ## echo $A"B" ## 张B echo ${A}B ## 张B
将变量中的首个旧字符串替换成新字符串的语法为${变量/旧字符串/新字符串}
将变量中的所有旧字符串替换新字符串的语法为${变量//旧字符串/新字符串}
X="他叫张三,张三的张,张三的三。" echo $X ## 他叫张三,张三的张,张三的三。 echo ${X/的/之} ## 他叫张三,张三之张,张三的三。 echo ${X//的/之} ## 他叫张三,张三之张,张三之三。
test用来检查文件类型以及比较数值。语法:test condition && ture执行的操作 || false时执行的操作
test 5 -eq 5 && echo Yes || echo No # -eq 判断是否等于,也可以用 == test 5 == 15 && echo Yes || echo No test 5 -ne 10 && echo Yes || echo No # -ne 判断是否不等于,也可以用 != test -f test.txt && echo "Exist" || touch test.txt # 判断这个文件是否存着,不存在就建一个 test -f test.txt && echo "Exist" || touch test.txt # 已经存在了,就 echo Exist
用 man test查看更多的选项。这里也可以使用单中括号代替test,比如:
[ -f test.txt ] && echo "Exist" || touch test.txt
语法1(if…then…fi):
if condition then commands # 多条命令就用多行,或者分号;隔开 fi
这里的;也可以是换行。
A=1; B=1 if [ $A == $B ]; then echo A; echo B; fi # 注意方括号和if之间以及和里边的公式之间,都需要有个空格,不然又得时候会报错。
一般在脚本中这样写,更加清晰明了,一般在编程的时候都是需要换行,做好缩进和对齐,以便阅读。
A=1 B=1 if [ $A == $B ] then echo A echo B fi
单方括号也可以用test的形式。
语法2(if…then…else…fi):
if condition then Tcommands #condition为true的时候执行Tcommands,多条命令就用多行,或者分号;隔开 else Fcommands #多条命令就用多行,或者分号;隔开 fi
,可以是多个,用;隔开或者换行。否则执行Fcommands。
语法3(if…then…elif…then…else…fi):
if conditionA then Acommands elif conditionB # 此行开始往下三行就属于这一个elif,可以有多个elif,比如这里有两个elif, then Bcommands elif conditionC #通过多个elif判断多个条件 then Ccommands else Fcommands fi
语法:
for var in item1 item2 ... itemN do commands # 多条命令就用多行,或者分号;隔开 done
比如,这里我们可以和上边的if一起,编个一段小程序
for i in {1..10} #这里用单花括号,表示1数到10。 do if [ $i -lt 3 ] then echo i=$i" i < 3" elif [ $i -gt 8 ] then echo i=$i" i > 8" elif [ $i -gt 5 ] then echo i=$i" i > 5 and i <= 8" else echo i=$i" i >= 3 and i <=5" fi done
语法:
while [ condition ] do commands # 多个commands的时候每个conmmand一行 done
可以改写一下上边的for循环
i=1 while [ $i -le 10 ] do if [ $i -lt 3 ] then echo i=$i" i < 3" elif [ $i -gt 8 ] then echo i=$i" i > 8" elif [ $i -gt 5 ] then echo i=$i" i > 5 and i <= 8" else echo i=$i" i >= 3 and i <=5" fi ((i++)) # 每次执行完了之后给i+1,这里复习一下上边提到过的双小括号的用法 done
本网页已被访问8996次;最后编辑时间: 2024/11/02 21:06