日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

菜鸟教程之Shell 脚本学习笔记(二)

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 菜鸟教程之Shell 脚本学习笔记(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Shell 傳遞參數

  • $# :傳遞到腳本的參數個數;
  • $0:?執行的文件名;
  • $nn 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推……
  • $*:以一個單字符串顯示所有向腳本傳遞的參數;
  • $@:與$*相同,但是使用時加引號,并在引號中返回每個參數。
  • $$:腳本運行的當前進程ID號;
  • $!:后臺運行的最后一個進程的ID號;
  • $?:顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤;
  • $-:顯示Shell使用的當前選項,與set命令功能相同;

Shell 運算符:

1.?表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2;

2.?完整的表達式要被 ` ` 包含,例如:val=`expr 2 + 2`;

3.?乘法:`expr $a \* $b` ,乘號(*)前邊必須加反斜杠(\)才能實現乘法運算;

Shell關系運算符:關系運算符只支持數字,不支持字符串,除非字符串的值是數字,例如a=10,b=20;

  • -eq:檢測兩個數是否相等,相等返回 true,[ $a -eq $b ] 返回?false;
  • -ne:檢測兩個數是否不相等,不相等返回 true,[ $a -ne $b ] 返回 true;
  • -gt:檢測左邊的數是否大于右邊的,如果是,則返回 true,[ $a -gt $b ] 返回 false;
  • -lt:檢測左邊的數是否小于右邊的,如果是,則返回 true,[ $a -lt $b ] 返回 true;
  • -ge:檢測左邊的數是否大于等于右邊的,如果是,則返回 true,[ $a -ge $b ] 返回 false;
  • -le:檢測左邊的數是否小于等于右邊的,如果是,則返回 true,[ $a -le $b ] 返回 true;
  • ==:相等。用于比較兩個數字,相同則返回 true,[ $a == $b ] 返回?false;
  • !=:不相等。用于比較兩個數字,不相同則返回 true,[ $a != $b ] 返回 true;
  • > 和 < 進行比較時,需要使用[[ ... ]] 條件判斷結構;

Shell布爾、邏輯運算符:假定變量 a 為 10,變量 b 為 20:

  • !:非運算,表達式為 true 則返回 false,否則返回 true,[ ! false ] 返回 true;
  • -o:或運算,有一個表達式為 true 則返回 true,[ $a -lt 20 -o $b -gt 100 ] 返回?true;
  • -a:與運算,兩個表達式都為 true 才返回 true,[ $a -lt 20 -a $b -gt 100 ] 返回?false;
  • &&:邏輯的 AND,[[ $a -lt 100 && $b -gt 100 ]] 返回 false;
  • ||:邏輯的 OR,[[ $a -lt 100 || $b -gt 100 ]] 返回 true;

注:[]等價于test命令;

Shell字符串獨有運算符:

  • -z:檢測字符串長度是否為0,為0返回 true;
  • -n:檢測字符串長度是否為0,不為0返回 true;
  • $:檢測字符串是否為空,不為空返回 true;

文件測試運算符:

操作符說明舉例
-b file檢測文件是否是塊設備文件,如果是,則返回 true。[ -b $file ] 返回 false。
-c file檢測文件是否是字符設備文件,如果是,則返回 true。[ -c $file ] 返回?false。
-d file檢測文件是否是目錄,如果是,則返回 true。[ -d $file ] 返回 false。
-f file檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。[ -f $file ] 返回?true。
-g file檢測文件是否設置了 SGID 位,如果是,則返回 true。[ -g $file ] 返回?false。
-k file檢測文件是否設置了粘著位(Sticky Bit),如果是,則返回 true。[ -k $file ] 返回?false。
-p file檢測文件是否是有名管道,如果是,則返回 true。[ -p $file ] 返回?false。
-u file檢測文件是否設置了 SUID 位,如果是,則返回 true。[ -u $file ] 返回?false。
-r file檢測文件是否可讀,如果是,則返回 true。[ -r $file ] 返回?true。
-w file檢測文件是否可寫,如果是,則返回 true。[ -w $file ] 返回?true。
-x file檢測文件是否可執行,如果是,則返回 true。[ -x $file ] 返回?true。
-s file檢測文件是否為空(文件大小是否大于0),不為空返回 true。[ -s $file ] 返回?true。
-e file檢測文件(包括目錄)是否存在,如果是,則返回 true。[ -e $file ] 返回?true。

Shell printf 命令:printf? format-string? [arguments...]

#!/bin/bash # author:菜鳥教程 # url:www.runoob.comprintf "%-10s %-8s %-4s\n" 姓名 性別 體重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 楊過 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 執行腳本,輸出結果如下所示: 姓名 性別 體重kg 郭靖 男 66.12 楊過 男 48.65 郭芙 女 47.99%s %c %d %f都是格式替代符 %-10s 指一個寬度為10個字符(-表示左對齊,沒有則表示右對齊), 任何字符都會被顯示在10個字符寬的字符內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。 %-4.2f 指格式化為小數,其中.2指保留2位小數。

printf的轉義序列

序列說明
\a警告字符,通常為ASCII的BEL字符
\b后退
\c抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數里的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略
\f換頁(formfeed)
\n換行
\r回車(Carriage return)
\t水平制表符
\v垂直制表符
\\一個字面上的反斜杠字符
\ddd表示1到3位數八進制值的字符。僅在格式字符串中有效
\0ddd表示1到3位的八進制值字符

for 循環:

for var in item1 item2 ... itemN docommand1command2...commandN done 寫成一行: for var in item1 item2 ... itemN; do command1; command2… done;

while 語句:

while condition docommand done例如: #!/bin/bash int=1 while(( $int<=5 )) doecho $intlet "int++" done 運行腳本,輸出: 1 2 3 4 5

使用中使用了 Bash let 命令,它用于執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量;

無限循環 :

while : docommand done 或者 while true docommand done 或者 for (( ; ; ))

until 循環:

until 循環執行一系列命令直至條件為 true 時停止。

until 循環與 while 循環在處理方式上剛好相反。

一般 while 循環優于 until 循環,但在某些時候—也只是極少數情況下,until 循環更加有用。

until 語法格式: until condition docommand done condition 一般為條件表達式,如果返回值為 false,則繼續執行循環體內的語句,否則跳出循環。 以下實例我們使用 until 命令來輸出 0 ~ 9 的數字: #!/bin/basha=0until [ ! $a -lt 10 ] doecho $aa=`expr $a + 1` done 運行結果: 輸出結果為: 0 1 2 3 4 5 6 7 8 9

case:Shell case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。

case 值 in 模式1)command1command2...commandN;; 模式2)command1command2...commandN;; esac

case工作方式如上所示。取值后面必須為單詞in,每一模式必須以右括號結束。取值可以為變量或常數。匹配發現取值符合某一模式后,其間所有命令開始執行直至 ;;。

取值將檢測匹配的每一個模式。一旦模式匹配,則執行完匹配模式相應命令后不再繼續其他模式。如果無一匹配模式,使用星號 * 捕獲該值,再執行后面的命令。

Shell函數:

[ function ] funname [()]{action;[return int;] }

說明:

  • 1、可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
  • 2、參數返回,可以顯示加:return 返回,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255
下面的例子定義了一個函數并進行調用: #!/bin/bash # author:菜鳥教程 # url:www.runoob.comdemoFun(){echo "這是我的第一個 shell 函數!" } echo "-----函數開始執行-----" demoFun echo "-----函數執行完畢-----" 輸出結果: -----函數開始執行----- 這是我的第一個 shell 函數! -----函數執行完畢-----

下面定義一個帶有return語句的函數:

#!/bin/bash # author:菜鳥教程 # url:www.runoob.comfunWithReturn(){echo "這個函數會對輸入的兩個數字進行相加運算..."echo "輸入第一個數字: "read aNumecho "輸入第二個數字: "read anotherNumecho "兩個數字分別為 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum)) } funWithReturn echo "輸入的兩個數字之和為 $? !" 輸出類似下面: 這個函數會對輸入的兩個數字進行相加運算... 輸入第一個數字: 1 輸入第二個數字: 2 兩個數字分別為 1 和 2 ! 輸入的兩個數字之和為 3 !

函數返回值在調用該函數后通過 $? 來獲得。

注意:所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。

cat相關:

cat << EOF >> config.h表示以下內容追加到config.h中,直到出現EOF標記為止,例如:

cat << EOF >> config.h
#include <config_cmd_defaults.h>
#include <config_defaults.h>
#include <configs/${CONFIG_NAME}.h>
#include <asm/config.h>
#include <config_fallbacks.h>
#include <config_uncmd_spl.h>
EOF

總結

以上是生活随笔為你收集整理的菜鸟教程之Shell 脚本学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。