shell語法
- 概論
- 註釋
- 變數
- 預設變數
- 陣列
- expr命令
- read命令
- echo命令
- printf命令
- test命令與判斷符號[]
- 判斷語句
- 迴圈語句
- 函式
- exit命令
- 檔案重定向
- 引入外部指令碼
7.shell語法——read命令
read
命令用於從標準輸入中讀取單行資料。當讀到檔案結束符時,exit code
為1,否則為0。
引數說明
-p
: 後面可以接提示資訊-t
:後面跟秒數,定義輸入字元的等待時間,超過等待時間後會自動忽略此命令
例項:
acs@9e0ebfcd82d7:~$ read name # 讀入name的值
acwing yxc # 標準輸入
acs@9e0ebfcd82d7:~$ echo $name # 輸出name的值
acwing yxc #標準輸出
acs@9e0ebfcd82d7:~$ read -p "Please input your name: " -t 30 name # 讀入name的值,等待時間30秒
Please input your name: acwing yxc # 標準輸入
acs@9e0ebfcd82d7:~$ echo $name # 輸出name的值
acwing yxc # 標準輸出
8. shell語法——echo命令
echo
用於輸出字串。命令格式:
echo STRING
顯示普通字串
echo "Hello AC Terminal"
echo Hello AC Terminal # 引號可以省略
顯示跳脫字元
echo "\"Hello AC Terminal\"" # 注意只能使用雙引號,如果使用單引號,則不轉義
echo \"Hello AC Terminal\" # 也可以省略雙引號
顯示變數
name=yxc
echo "My name is $name" # 輸出 My name is yxc
顯示換行
echo -e "Hi\n" # -e 開啟轉義
echo "acwing"
輸出結果:
Hi
acwing
顯示不換行
echo -e "Hi \c" # -e 開啟轉義 \c 不換行
echo "acwing"
輸出結果:
Hi acwing
顯示結果定向至檔案
echo "Hello World" > output.txt # 將內容以覆蓋的方式輸出到output.txt中
原樣輸出字串,不進行轉義或取變數(用單引號)
name=acwing
echo '$name\"'
輸出結果
$name\"
顯示命令的執行結果
echo \`date`
輸出結果:
Wed Sep 1 11:45:33 CST 2021
10. shell語法——printf命令
printf
命令用於格式化輸出,類似於C/C++
中的printf
函式。
預設不會在字串末尾新增換行符。
命令格式:
printf format-string [arguments...]
用法示例
指令碼內容:
printf "%10d.\n" 123 # 佔10位,右對齊
printf "%-10.2f.\n" 123.123321 # 佔10位,保留2位小數,左對齊
printf "My name is %s\n" "yxc" # 格式化輸出字串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表示式的值作為引數
輸出結果:
123.
123.12 .
My name is yxc
2 * 3 = 6
11. shell語法——test命令與判斷符號[]
邏輯運算子&&和||
&&
表示與,||
表示或- 二者具有短路原則:
expr1 && expr2
:當expr1
為假時,直接忽略expr2
expr1 || expr2
:當expr1
為真時,直接忽略expr2
- 表示式的
exit code
為0,表示真;為非零,表示假。(與C/C++
中的定義相反)
test命令
在命令列中輸入man test
,可以檢視test
命令的用法。
test
命令用於判斷檔案型別,以及對變數做比較。
test
命令用exit code
返回結果,而不是使用stdout
。0表示真,非0表示假。
例如:
test 2 -lt 3 # 為真,返回值為0
echo $? # 輸出上個命令的返回值,輸出0
acs@9e0ebfcd82d7:~$ ls # 列出當前目錄下的所有檔案
homework output.txt test.sh tmp
acs@9e0ebfcd82d7:~$ test -e test.sh && echo "exist" || echo "Not exist"
exist # test.sh 檔案存在
acs@9e0ebfcd82d7:~$ test -e test2.sh && echo "exist" || echo "Not exist"
Not exist # testh2.sh 檔案不存在
檔案型別判斷
命令格式:
test -e filename # 判斷檔案是否存在