一、條件測試:(與echo %?聯用)
①、test EXPRESSION test -V NAME <==> [ -v NAME] 判斷變量是否被定義過。“”空也算被定義過
②、[ EXPRESSION ]
③、[[ EXPRESSION ]] (支持通配符與正則表達式)
二、數值測試:
-gt >
-ge >=
-eq =
-ne !=
-lt <
-le <=
三、字符串測試:
-z 判斷是否為空(“”也算空)
-n 判斷是否為不空
= [ "$str1" = "$str2" ]
> ascii的比較
< sacii的比較
!= 支持通配符 [[ "$str1" != *.log ]]
== 支持通配符 [[ "$str1" == *.log ]]
=~ 支持正則表達式 [[ "str1" =~ \.log$ ]] 判斷是否為數字:[[ "$N" =~ ^[0-9]+$ ]]
四、文件測試:
-e <==> -a 是否存在
-b
-c
-f
-d
-s
-p
-L <==> -h
五、權限測試:
-r
-w
-x
-u suid
-g sgid
-k sticky
六、組合測試:
[ EXPRESSION -a EXPRESSION] 並且(and)
[ EXPRESSION -o EXPRESSION] 或者(or)
[ ! EXPRESSION] 取反
&& 短路與。如果為真,則繼續執行
|| 短路或。如果為假,則繼續執行
! 取反
例如:[ $[$RANDOM%6] -eq 0 ] && rm -rf / ||echo "luck"
():使用變量、命令是會有自己的shell,所以(exit)退出的()的shell。 |其實也是兩邊各有各自的shell
{}:使用變量、命令是當前用戶shell。
故在腳本中,使用()中的exit不退出腳本shell。{}會退出腳本。所以用()可以做臨時測試。
例如臨時腳本:
#!/bin/bash ip=10.0.0.1 ping -c1 -w1 $ip &> /dev/null && echo "ip is up"||{ echo "ip is unreachable";exit;} echo "script is finished"
不允許普通客戶登陸:echo "Deny common user log > /etc/nologin"
允許登陸:rm -rf /etc/nologin
read:默認將變量放入$REPLYA。別於|聯用,因為|也會生成各自的shell。 例如:echo "mage" |{ read name;echo $name;}; echo $mage 此命令結束后name並不是magedu
test -p "請輸入xxx" name
例如:雞兔同籠腳本:
#!/bin/bash # #************************************************************* #Author: ldy #QQ: 8888888888 #Date: 2020-04-23 #FileName: jitu_Problem.sh #URL: http://www.lidyeyuan.com #Description: The test script #Copyright (C): 2020 All rights reserved #************************************************************* read -p "請輸入頭的數量:" head read -p "請輸入腳的數量:" foot rabbit=$[ foot/2-head ] chook=$[ head-rabbit ] echo "兔子:$rabbit" echo "雞:$chook"
配置文件:
全局配置:/etc/profile.d
/etc/profile
/etc/bashrc
個人配置:~/bash_profile
~/.bashrc
登陸:
交互式:命令行終端登陸。
su - username
配置文件執行順序:/etc/profile>/etc/profile.d/*.sh>~/.bash_profile>~/.bashrc>/etc/bashrc
非交互式:圖形界面打開終端
su username
執行腳本
任何其他bash實例
配置文件執行順序:/etc/profile.d/*.sh>/etc/bashrc>~/.bashrc
功能划分:profile類和bashrc類
profile類:
為交互式登陸的shell提供配置
功能:定義環境變量
運行命令或腳本
bashrc類:
為交互式和非交互登陸的shell提供配置
功能:定義別名、函數
定義本地變量
修改這兩類文件后需使之生效。
~/.bash_logout:但系統退出時,自動運行某些命令:如在里面添加rm -rf /data/test