shell基礎筆記1
阿新 • • 發佈:2018-11-22
---恢復內容開始---
1 test命令中不能使用浮點小數值,如:
A=1.444444;[ $A -gt 1 ]2 test命令中的>或<必須轉義,否則shell會把它們當做重定向符號而把字串當做檔名來建立,如:[ $A \> $B ] 3 在test命令中大寫字母會被當成小於小寫字母的,這與sort命令相反。 4 複合條件測試,如: [ -d /etc ] && [ -f /etc/passwd ] [ -d /etc -a -f /etc/passwd ] [[ -d /etc && -f /etc/passwd ]] [ -d /etc ] || [ -f /etc/passwd ] [[ -d /etc || -f /etc/passwd ]] [ -d /etc -o -f /etc/passwd ] 5 if-then語句的高階特性:用於數學表示式的"(( ))";用於高階字串處理功能(模式匹配)的"[[ ]]" 6 for語句都去列表中的複雜值 shell看到了列表之中的單引號並嘗試使用他們來定義一個單獨的資料值,造成混亂,解決辦法:1使用\將單引號轉義;2使用雙引號來定義用到單引號的值,如:for test in I don\'t know if "this'll" work 如果變數的取值包含空格,要容納這種值,應將變數用雙引號括起來,如:if [ -f "$test" ] c語言風格的for迴圈:for ((i=1;i<=10;i++)) do commands done for ((a=1,b=10;a<=10;a++,b--)) do commands done 7 命令列引數: $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} 最後一個引數變數值${!#}; $*變數會將所有命令列引數當成一個整體的單個引數,而
done
.... now $var can be used ....
例子:
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
該指令碼執行結果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
注意:select是擴充套件應用。
來源: <http://www.jbxue.com/article/31438.html> 10 SECONDS 當前執行的bash程序的執行時間(以秒為單位) 11 在同一行裡用空白字元隔開為多個變數賦值是可以的。
如果給變數賦的值中有空白字元,引號是必須的。
從字串的右邊結尾處提取?echo ${stringZ: -4}
12 子串替換:
- ${string/substring/replacement}
-
用$replacement替換由$substring匹配的字串。
- ${string//substring/replacement}
-
用$replacement替換所有匹配$substring的字串。
1 stringZ=abcABC123ABCabc 2 3 echo ${stringZ/abc/xyz} # xyzABC123ABCabc 4 #用'xyz'代替第一個匹配的'abc'. 5 6 echo ${stringZ//abc/xyz} # xyzABC123ABCxyz 7 # 用'xyz'代替所有的'abc'.
- ${string/#substring/replacement}
-
如果$string字串的最前端匹配$substring字串,用$replacement替換$substring.
- ${string/%substring/replacement}
-
如果$string字串的最後端匹配$substring字串,用$replacement替換$substring.
1 stringZ=abcABC123ABCabc 2 3 echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc 4 # 用'XYZ'替換前端的'abc'. 5 6 echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ 7 # 用'XYZ'替換後端的'abc'.
來源: <http://manual.51yip.com/shell/string-manipulation.html> 13 while (( a <= LIMIT )) # 雙圓括號, 變數前邊沒有"$". 14 生成指定範圍的隨機數和字串,指令碼如下: #!/bin/bash count=$[$2-$1+1] #num=$(date +%s%N) echo $[$RANDOM%$count+$1] #使用date 生成隨機字串 date +%s%N | md5sum | head -c 10 #使用 /dev/urandom 生成隨機字串 cat /dev/urandom | head -n 10 | md5sum[cksum] | head -c 10 #使用命令expect包提供的複雜密碼生成工具mkpasswd # echo $RANDOM | md5sum 15 wc -c 命令計算字元長度時會加上單詞間空格,製表符,換行符 16 date -d "1 day ago" +'%Y-%m-%d' 或 date --date="1 day ago" +'%Y-%m-%d' date -d "10 day ago" +'%Y-%m-%d' date -d "1 month ago" +'%Y-%m-%d' date -d "1 year ago" +'%Y-%m-%d' 17 command1 || { command2;command3;...... } 18 if command1;command2;command... then .... fi
---恢復內容結束---