標籤:命令 shell 顯示 字元 方法
使用雙引號的字元
雙引號是Shell的重要組成部分
$ echo Hello World Hello World $ echo "Hello World" Hello World
如何顯示: Hello “World”
以下命令可以嗎?$ echo “Hello “World””
正確方法:echo “Hello \”World\””
條件測試
測試命令
test expression 或 [ expression ]
test命令支援的條件測試
字串比較
算術比較
與檔案有關的條件測試
邏輯操作
str1 = "abc"if [ $str = "abc" ]; then echo "The strings are equal"else echo "The strings are not equal“ fi
mkdir temp if [ -d temp ]; then echo "temp is a directory" fi
條件陳述式
形式if [ expression ]then statementselif [ expression ]then statementselif …else statementsfi緊湊形式; (同一行上多個命令的分隔字元)
case語句
當執行append時,有多少種可能的情況出現?
#!/bin/sh#指令碼名: appendcase $# 1) cat >> $1 ;; 2) cat >> $2 < $1 ;; *) echo ‘usage: $0 [fromFile] toFile‘ ;;esac
No parameter or more than 2Only 1 parameter & the file existOnly 1 parameter & the file not existBoth file exist1st exist; 2nd not exist2nd exist; 1st not existBoth files not exist
select語句
形式select item in itemlistdo statementsdone作用產生菜單列表
舉例:一個簡單的菜單選擇程式#!/bin/shclearselect item in Continue Finishdo case “$item” in Continue) ;; Finish) break ;; *) echo “Wrong choice! Please select again!” ;; esacdoneQuestion: 用while語句類比?
命令組合語句
分號串聯command1; command2; …條件組合AND命令表 格式:statement1 && statement2 && statement3 && …OR命令表 格式:statement1 || statement2 || statement3 || …
函數調用
形式func(){ statements}局部變數local關鍵字函數的調用func para1 para2 …傳回值return
yesno(){ msg=“$1” def=“$2” while true; do echo” ” echo “$msg” read answer if [ “$answer” ]; then case “$answer” in y|Y|yes|YES) return 0 ;; n|N|no|NO) return 1 ;; *) echo “ ” echo “ERROR: Invalid response, expected \”yes\” or \”no\”.” continue ;;esac else return $def fi done}
調用函數yesnoif yesno “Continue installation? [n]” 1 ; then :else exit 1fi
雜項命令
break: 從for/while/until迴圈退出
continue: 跳到下一個迴圈繼續執行
exit n: 以退出碼”n”退出指令碼運行
return: 函數返回
export: 將變數匯出到shell,使之成為shell環境變數
set: 為shell設定參數變數
unset: 從環境中刪除變數或函數
trap: 指定在收到作業系統訊號後執行的動作
“:”(冒號命令): 空命令
“.”(句點命令)或source: 在當前shell中執行命令
Shell應用舉例
編寫一個指令碼,實現對Linux系統中的使用者管理,具體功能要求如下
該指令碼添加一個新組為class1,然後添加屬於這個組的30個使用者,使用者名稱的形式為stuxx(其中xx從01到30)
關鍵命令
groupadd
useradd
mkdir
chown
chgrp
#!/bin/sh i=1groupadd class1while [ $i -le 30 ]doif [ $i -le 9 ] ;thenusername=stu0${i}elseusername=stu${i}fiuseradd $username mkdir /home/$usernamechown -r $username /home/$usernamechgrp -r class1 /home/$username i=$(($i+1))done
Linux - Shell程式設計基本文法