linux學習day4——shell指令碼中

Sunyehh發表於2024-10-28

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  # 判斷檔案是否存在

12.

相關文章