bin/bash 是大部人用的,也是預設的 shell,可看 /etc/passwd 的最後一個欄位
※參數
假設檔名叫 xxx.sh,下 xxx.sh aa bb$#:表示有幾個參數,此例為 2
$0:xxx.sh,也就是檔名
$1:aa
$2:bb
一直到$9,10以上要用 {} 包起來,如 ${12}
$*:表示所有參數,整個參數是一個整體,如"$1 $2 $3",參數和參數之間用空隔隔開
$@:也表示所有參數,但每個參數是分開的,如 "$1" "2" "$3",參數和參數之間用空隔隔開
以上兩個需視情況用「"」包起來使用
$$:processID,ps -aux 可查看
$?:讀取上一行指令有沒有錯誤,沒錯回傳0,否則回傳錯誤代碼,最多255,如果超過255,那就是除 256 的餘數
man bash ,搜尋 ^exit status
※test.sh
#!/bin/bash echo $# echo $@ echo $0 echo $1 echo $$ echo $? #echo xxx "aaa" "bbb" xxx(){ echo $1 $2 } xxx "aaa" "bbb"
※./test.sh a b cccc de 結果為
4
a b cccc de
test.sh
a
547
0
aaa bbb
※./和sh可執行shell,但./需要w權限
※變數
a=apple(=前後不可有空格,字串有空格時,用「'」或「"」包起來)echo $a 印出a變數
export aaa 將aaa變數提升為系統變數
source xxx 因為提升為系統變數後,要重登入才有效,懶得重登入就可用這個指令
unset xxx 刪除xxx變數
「`」鍵盤左上角下來一格的按鍵,可用這個包指令,然後串接字符串
如:echo xxx `date` ooo
四則運算(+-*/%)和test
$a+$b 用 $(( 和 )) 包起來,然後裡面的$可有可無-> $((a+b))無法用小數點
${#a}:長度
${a:2}:最前面扣2長
${a:2:4}:最前面扣2長後,取4長
${a#a*c}:從前面開始刪除abc,刪一次(勉強)
${a##a*c}:從前面開始刪除abc,(貪婪)
${a%a*c}:從後面開始刪除abc,刪一次(勉強)
${a%%a*c}:從後面開始刪除abc,(貪婪)
test
-f -d -r -w -xtest -f $f && echo "is a file" || echo "isn't a file"
&& || 為三元運算子
[]
1.前後必需空格2.變數要用「"」包起來
[ "$a" == '5' ] && echo "yes" || "no"
== != -eq -ne -gt -ge -lt -le
※條件
if
read xxxif [ "$xxx" == '1' ]; then
elif []; then
else
fi
/proc/cpuinfo
/proc/meminfo
-a 且
-o 或
if [ "$xxx" == 'a' -o "$xxx" == 'd' -o "$xxx" == 'xx' ]
case
read ncase "$n" in
'a') echo 'aaa';;
'b') echo 'bbb';;
*) echo '***';;
esac
※陣列
xxx=("aaa" "bbb" "ccc")
echo length:${#xxx[@]}
for((i=0; i<${#xxx[@]}; i++)); do
echo ${xxx[i]}
done
※迴圈
while
while 條件; dodone;
while [ "$i" -le 10 ]; do
echo "$i"
i=$((i+1))
done
until
#觀念和 while 相反,判斷式為 true 時停止until 條件; do
done;
until [ "$i" -gt 10 ]; do
echo "$i"
i=$((i+1))
done
for
for (()); do內容
done;
for ((i=0;i<10;i++)) do
echo "$i"
done
for in
for x in aaa bbb ccc; doecho "$x"
done
沒有留言:
張貼留言