1. 程式人生 > >shell基礎筆記1

shell基礎筆記1

---恢復內容開始---

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} 最後一個引數變數值${!#}; $*變數會將所有命令列引數當成一個整體的單個引數,而
[email protected]
變數會單獨處理命令列每個引數。   8 echo   -e "\a"       (嘩嘩聲)     內部變數:計算指令碼執行時長$SECONDS   9 selsect select 表示式是一種bash的擴充套件應用,尤其擅長於互動式使用。使用者可以從一組不同的值中進行選擇。  select var in ... ; do  break 

done 
.... now $var can be used ....

例子: 
 

#!/bin/sh 
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

---恢復內容結束---