執行腳本的三種方式
查找變量的過程
變量引用的順序》》先從當前進程查詢變量,如果當前進程沒有此變量,默認去父進程查找這個變量。如果查找到則返回,否則一直查找到 祖宗(PID為1),還沒有,則就沒找到。
export修飾變量,則表明這個變量對子進程是可見的。或者說 用export 修飾的變量,可以轉遞給子進程。
運算符
# $((算式)) 是新語法 或 $[ 算式 ] 就語法 不推薦
# $((算式)) 中的算式 可以用數學中 >=、*等 變量可省略 $ 用途場景 數學運算、數值比較 不支持浮點型
# $[ 算式 ] 大于 -gt,小于 lt等 變量可省略 $ 用途場景 文件屬性 、字符串
test
test expression
或者使用方括號的簡寫形式:
[ expression ] 這種更常用
注意:使用方括號格式時,表達式與方括號之間必須有空格,即 [空格EXPRESSION空格]
[ ] 》》》1, 即false
[ xx ] 》》0 ,即true
當 test 判斷的表達式為真時,返回狀態碼為 0;如果為假,則返回非 0 值。
功能
test 命令可以進行以下幾種類型的測試:
數值比較:檢查兩個數值之間的關系。
字符串比較:檢查字符串是否相等或為空。
文件測試:檢查文件是否存在、是否可讀、是否可寫等。
常用選項
數值比較
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
# 數值比較
#!/bin/bashnum1=10
num2=20if test $num1 -lt $num2; thenecho "$num1 小于 $num2"
elseecho "$num1 不小于 $num2"
fi
字符串比較
=:字符串相等
!=:字符串不相等
-z:字符串為空
-n:字符串非空
# 字符串比較
#!/bin/bashstr1="hello"
str2="world"if [ "$str1" = "$str2" ]; thenecho "字符串相同"
elseecho "字符串不同"
fi
文件測試
-e:文件存在 existence
-f:文件是普通文件 file 文件存在且是一個普通的文件
-d:文件是目錄 directory 文件存在且是一個目錄
-r:文件可讀 read
-w:文件可寫 write
-x:文件可執行 execute
# 文件測試
#!/bin/bashFILE="/etc/passwd"if [ -e "$FILE" ]; thenecho "文件 $FILE 存在"
elseecho "文件 $FILE 不存在"
fi
&& 、|| 跟高級語言 and ,or 一樣, 還稱短路 運算符
條件1 && 條件2 》》 如果條件1為 真 true,則會繼續判斷 條件2 》》 如果條件1為 假 false ,則不會執行 條件2
條件1 || 條件2》》 如果條件1為 真 true,則不會執行 條件2 》》 如果條件1為 假 false ,則會繼續判斷 條件2
》》多重判斷條件
流程控制
if 判斷
############# 單分支 ############
if [ condition ];thencommand
fi
# 或者
if [ condition ]
thencommand
fi
############ 多分支 ############
if [ condition ]; thencommand
elif [ condition ]
thencommand
else command
fi
case
相當于 C# 中 switch case
;; 相當于 break
*) 相當于 default
case 值 in
模式1)command1command2...commandN;;
模式2)command1command2...commandN;;
esac
#!/bin/bash
while true
do
echo "請錄入成績的等級"
read num
case $num inA) echo "優秀";;B) echo "良好";;C) echo "及格";;*) echo '不及格';;
esac
done
~
for
# 語法1
for (( 初始值; 循環控制條件; 變量變換 ))
docommand
done
# 例子
for((i=0;i<5;i++))
# 語法2
for var in item1 item2 ... itemN
docommand1command2...commandN
done
# 例子
for i in {0..4}
for i in `seq 0 4`
# 也可以寫成一行
for var in item1 item2 ... itemN; do command1; command2… done;
#!/bin/bash
for (( i=1;i<=100;i++))
dosum=$((sum + i)) # 或 sum=$[ $sum + $i]
done
echo $sum
while
# 基本語法
while [ 條件判斷式 ]
docommand
done# 案例
#!/bin/bash
i=0
while [ $i -lt 101 ]
do((sum2=sum2+i))((i++))#或者# let sum2+=i# let i++# 或者換成 這種是舊語法 不推薦 # sum2=$[ $sum2 + $i ]# i=$[$i + 1]
done
echo $sum2
》》# 舊語法(不推薦)
result=$[4 * (5 + 1)]
》》# 新語法(推薦)
result=$((4 * (5 + 1)))
read 讀取控制臺輸入
# 基本語法
read (選項) (參數)
選項:-p 指定讀取值時的提示符-t 指定讀取值時等待的時間(單位秒),如果不加 -t,表示一直等下去
參數:變量: 指定讀取值的變量名 (讀取的賦給那個變量) 這個不能省略