[29期] [Linux常用]Shell 命令和語句

iteye_6481發表於2011-07-20
[常用]Shell 命令和語句
1. read命令:從鍵盤讀入資料,賦給變數
# read USERNAME
範例:
  1. #!/bin/sh
  2. read first second third
  3. echo "the first parameter is $first"
  4. echo "the second parameter is $second"
  5. echo "the third parameter is $third"


2. expr 命令:對整數型變數進行算術運算。
語法:
# expr Num1 + Num2
-
\* 需要轉義
/

示例:[conde]
expr $var1 – 5
expr $var1 / $var2
expr $var3 \* 10
expr `expr 5 + 7` / $var4 * 複雜的運算
var4=`expr $var1 / $var2`
[conde]

3. test 語句:變數測試語句,用於測試變數是否相等、是否為空、檔案型別等。
# test 測試條件
測試範圍:整數、字串、檔案
a) 整數測試
test INT1 –eq INT2 測試整數是否相等(INT1 is equal to INT2)
test INT1 –ge INT2 測試INT1是否>=INT2 (INT1 is greater than or equal to INT2)
test INT1 –gt INT2 測試INT1是否>INT2(INT1 is greater than INT2)
test INT1 –le INT2 測試INT1是否=<INT2(INT1 is less than or equal to INT2)
test INT1 –lt INT2 測試INT1是否<INT2(INT1 is less than INT2)
test INT1 –ne INT2 測試整數是否不相等(INT1 is not equal to INT2)
b) 字串測試
test STR1=STR2 測試字串是否相等
test STR1!=STR2 測試字串是否不相等
test STR1 測試字串是否不為空
test –n STR1 測試字串是否不為空
test –z STR1 測試字串是否為空
c) 檔案測試
test –d FILE 指定檔案是否目錄
test –f FILE 指定檔案是否常規檔案
test –x FILE 指定檔案是否可執行
test –r FILE 指定檔案是否可讀
test –w FILE 指定檔案是否可寫
test –a FILE 指定檔案是否存在
test –s FILE 檔案的大小是否非0
d) 變數測試語句:一般不單獨使用,一般做為if語句的測試條件,如
if test –d $1 then

fi

說明:測試$1是否為目錄
簡化:變數測試語句可用[ ]進行簡化,如test –d $1 等價於 [ -d $1 ]
e) 範例1:判斷兩個數的大小
程式碼
  1. #!/bin/sh
  2. if [ $# -ne 2 ]; then # 判斷此指令碼引數的個數是否等於2
  3. echo "Not enough parameters"
  4. exit 0
  5. fi
  6. if [ $1 -eq $2 ]; then
  7. echo "$1 equals $2"
  8. elif [ $1 -lt $2 ]; then
  9. echo "$1 littler than $2"
  10. elif [ $1 -gt $2 ]; then
  11. echo "$1 greater than $2"
  12. fi

執行:
  1. [root@linux example]# sh test 1 1
  2. 1 equals 1
  3. [root@linux example]# sh test 1 2
  4. 1 littler than 2
  5. [root@linux example]# sh test 2 1
  6. 2 greater than 1

f) 範例2:測試apache是否啟動

程式碼:
  1. #!/bin/sh
  2. # "if...else" usage
  3. # Using this program to show your system's services.
  4. echo "Now, the web services of this Linux system will be detect..."
  5. echo
  6. # Detect www service
  7. web=`/usr/bin/pgrep httpd` # 查詢httpd的PID
  8. if [ "$web" != "" ] # 判斷查詢結果
  9. then
  10. echo "The Web service is running."
  11. else
  12. echo "The Web service is NOT running."
  13. /etc/rc.d/init.d/httpd start # 啟動Apache服務
  14. fi

流程控制語句:用於控制shell程式的流程
4. exit語句:退出程式執行,並返回一個返回碼,返回碼為0表示正常退出,非0表示非正常退出。
語法:exit 0
5. if 語句
if...then...fi
範例:從新啟動apache服務
  1. #!/bin/sh
  2. if [ -x /etc/rc.d/init.d/httpd ] # 等價於if [ test –x /etc/init.d/http ]
  3. then
  4. /etc/rc.d/init.d/httpd restart
  5. fi

6. if...else 語句
語法:
if 條件1 than
命令1
elif 條件2 then
命令2
else
命令3
fi

其他:多個條件的聯合
-a:邏輯與,僅當兩個條件都成立時,結果為真。
-o:邏輯或,兩個條件只要有一個成立,結果為真。

範例:
  1. #!/bin/sh
  2. echo "please input a file name: "
  3. read file_name # 獲取檔名
  4. if [ -d $file_name ] # 檢測是否為目錄
  5. then
  6. echo "$file_name is a directory"
  7. elif [ -f $file_name ] # 是否為普通的檔案
  8. then
  9. echo "$file_name is a common file"
  10. elif [ -c $file_name -o -b $file_name ] # 是否為 裝置或
  11. then
  12. echo "$file_name is a device file"
  13. else
  14. echo "$file_name is an unknown file" # 不知道
  15. fi

7. for ... done 語句
語法:
for 變數 in 名字表
do
命令列表
done

範例:
  1. #!/bin/sh
  2. for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday ABC # 一次匹配in後面的值
  3. do
  4. echo “The day is : $DAY”
  5. done

8. select 語句
語法:
select 變數 in 關鍵字
do
command 1

command n

done

說明:select把關鍵字中的每一項做成類似表單,以互動的方式執行do和done之間的命令。
範例:
  1. #!/bin/sh
  2. # "select" Usage
  3. echo "What is your favourite OS?"
  4. select var in "Linux" "UNIX" "Windows" "Other" "Mac" # 選擇的數賦給變數var
  5. do
  6. break
  7. done
  8. echo "You have selected $var"

執行結果:
  1. [root@linux example]# sh select # 類似表單的選擇
  2. What is your favourite OS?
  3. 1) Linux
  4. 2) UNIX
  5. 3) Windows
  6. 4) Other
  7. 5) Mac
  8. #? 5
  9. You have selected Mac
  10. [root@linux example]#

9. case...esac 語句
語法:
case 變數 in
字串1) 命令列表1
;;
...
字串n) 命令列表n
;;
esac

範例1:
  1. #!/bin/sh
  2. echo "*******************************"
  3. echo "Please select your operation:"
  4. echo " Press "C" to Copy"
  5. echo " Press "D" to Delete"
  6. echo " Press "B" to Backup"
  7. echo "*******************************"
  8. read op # 鍵盤獲取字元
  9. case $op in # $op 匹配下面的字串,匹配成功執行其下的相應命令
  10. C)
  11. echo "your selection is Copy"
  12. ;;
  13. D)
  14. echo "your selection is Delete"
  15. ;;
  16. B)
  17. echo "your selection is Backup"
  18. ;;
  19. *)
  20. echo "invalide selection"
  21. esac

執行結果:
  1. [root@linux example]# sh case
  2. *******************************
  3. Please select your operation:
  4. Press C to Copy
  5. Press D to Delete
  6. Press B to Backup
  7. *******************************
  8. D
  9. your selection is Delete
  10. [root@linux example]#

範例2:select與case結合使用
  1. #!/bin/bash
  2. # "select" "case" Usage
  3. echo "a is 5, b is 3. Please select you method: "
  4. a=5
  5. b=3
  6. select var in "a+b" "a-b" "a*b" "a/b" # 從中選擇方法賦給var
  7. do
  8. break
  9. done
  10. case $var in # 匹配字串,執行相應的程式碼
  11. "a+b") echo 'a+b='`expr $a "+" $b`;;
  12. "a-b") echo 'a-b='`expr $a "-" $b`;;
  13. "a*b") echo 'a*b='`expr $a "*" $b`;;
  14. "a/b") echo 'a/b='`expr $a "/" $b`;;
  15. *) echo "input error..."
  16. esac

執行結果:
  1. [root@linux example]# sh select.case
  2. a is 5, b is 3. Please select you method:
  3. 1) a+b
  4. 2) a-b
  5. 3) a*b
  6. 4) a/b
  7. #? 2 # 選擇2的計算方法
  8. a-b=2
  9. [root@linux example]#

10. while 語句
語法:
while 條件
do
命令
done

範例:
  1. #!/bin/sh
  2. num=1
  3. while [ $num -le 10 ] # 判斷$num 是否=<10
  4. do
  5. SUM=`expr $num \* $num` # 執行乘法
  6. echo $SUM
  7. num=`expr $num + 1`
  8. done

11. until 語句
語法:
until 條件
do
命令
done

說明:until類似while迴圈,不同的是until是條件返回值為假時才繼續執行。
範例1:
  1. #!/bin/sh
  2. until [ -x /etc/inittab ] # 判斷/etc/inittab是否為可執行檔案,不是執行do裡面的語句
  3. do
  4. /bin/ls -l /etc/inittab
  5. exit 0
  6. done

範例2:until和read的結合,判斷輸入的字元,直到正確時迴圈退出
  1. #!/bin/bash
  2. # "read" "until" usage
  3. echo "Press Y/y to stop..."
  4. read input # 獲取字元
  5. until [ "$input" = "Y" ] || [ "$input" = "y" ] # 判斷後面的語句是否為真,為假時執行do…
  6. do
  7. echo "error input,please try again..."
  8. read input
  9. done
  10. echo "Stop here!"

關於:[ "$input" = "Y" ] || [ "$input" = "y" ],有一個為真,即為真。全部為假時即為假。



相關文章