如下內容是學習菜鳥教程之shell教程,所整理的筆記html
菜鳥教程之shell教程:http://www.runoob.com/linux/linux-shell.htmllinux
注意: 原生bash不支持簡單的數學運算,可是能夠經過其餘命令來實現,例如 awk 和 expr,expr 最經常使用。shell
expr 是一款表達式計算工具,使用它能完成表達式的求值操做。編程
#!/bin/bash val=`expr 2 + 2` echo "兩個數之和爲:$val" 運行實例: 兩數之和爲:4 注意:表達式和運算符之間喲要有空格,這與咱們熟悉的大部分編程語言不同 % 取餘 `expr $b % $a` == 相等,用於比較兩個數字,相同則返回true [$a == $b] 返回false != 不相等,用於比較兩個數字,不相同則返回true {$ != $b}返回true 注意:條件表達式要放在方括號之間,而且要有空格。
關係運算符只支持數字,不支持字符串,除非字符串的值是數字。 常見的關係運算符: 設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
常見的布爾運算符: 假定變量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
shell的邏輯運算符: 假設變量a爲10,變量b爲20 && 邏輯的and [[$a -lt $b -gt 100]]返回false || 邏輯的or ][[$a -lt 100 || $b -gt 100]]返回true
常見的字符串運算符: 假設變量a爲"abc",變量b爲"efg" -z 檢測字符串長度是否爲0,爲0返回ture [-z"$a"]返回false -n 檢測字符串長度是否爲0,不爲0返回true [-n"$"]返回true str 檢測字符串是否爲空,不爲空返回true [$a]返回true
文件測試符用於檢測unix文件的各類屬性 屬性檢測描述以下 -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]返回fasle -k file 檢測文件是否設置了粘着位(Sticky Bit),若是是,則返回true [-k $file]返回false -p file 檢測文件是不是有名管道,若是是,則返回true [-p $file]返回false -u file 檢測文件是否設置了SUID位,若是是,則返回true [-u $file]返回false -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 的 echo 指令與 PHP 的 echo 指令相似,都是用於字符串的輸出。bash
read 命令從標準輸入中讀取一行,並把輸入行的每一個字段的值指定給 shell 變量 #!/bin/sh read name echo "$name It is a test"
-n 顯示換行 菜鳥上面顯示-e開啓轉義,是錯誤的。 echo -e "ok! \n" echo "It is a test" 輸出: -e ok! It is a test
echo '$name\"' 輸出: $name\"
用xxx
顯示命令執行結果
echo date
編程語言
printf format-string [arguments] format-string:爲格式控制字符串 arguments:爲參數列表 eg: #!/bin/bash printf "%-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.3f\n" 郭芙 女 47.9876 執行腳本 輸出以下 ... %s %c %d %f都是格式替代符 %-10s 指一個寬度爲10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,若是不足則自動以空格填充,超過也會將內容所有顯示出來。 %-4.2f 指格式化爲小數,其中.2指保留2位小數。 思考教程上例題: 教程上例題源碼: #!/bin/bash printf "%d %s\n" 1 "abc" printf '%d %s\n' 1 "abc" printf %s abcdef printf %s abc def printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j printf "%s and %d \n" 執行結果: 1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0 以上結果我認爲有誤: 爲何 單個printf %s abcdef 輸出的是abcdef 而不是abcdefabcdefabc
%b 相應的參數被視爲有要處理的轉義序列的字符串 %c ASCLL字符,顯示相對應參數的第一個字符 %d,%i 十進制整數 %e 浮點格式 %E 浮點格式 %f 浮點格式 %g %e或%f轉換,看哪一個比較短,則刪除結尾的零 %G %E或%f轉換,看哪一個比較短,則刪除結尾的零 %o 不帶正負號的八進制轉換 %s 字符串格式 %u 不帶正負號的十進制值 %x 不帶正負號的十六進制。使用a至f表示10至15 %X 不帶正負號的十六進制。使用A至F表示10至15 %% 字面意義的%
\a 警告字符,一般爲ASCII的BEL字符 \b 後退(一位) \c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),並且,任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略 \f 換頁(formfeed) \n 換行 \r 回車(Carriage return) \t 水平製表符 \v 垂直製表符 \ 一個字面上的反斜槓字符 \ddd 表示1到3位數八進制值的字符,僅在格式字符串中有效 \0ddd 表示1到3位的八進制的字符,僅在格式字符串中有效 eg: printf "a string, no processing:<%s>\n" "A\nB" printf "a string, no processing:<%b>\n" "A\nB" printf "www.baiduu.com \a"
Shell中的test命令用於檢查某個條件是否成立,它能夠進行數值、字符和文件三個方面的測試工具
-eq 等於則爲真 -ne 不等於則爲真 -gt 大於則爲真 -ge 大於等於則爲真 -lt 小於則爲真 -le 小於等於則爲真 eg: num1=100 num2=100 if test $[num1] -eq $[num2] then echo '兩個數相等!' else echo '兩個數不相等!' fi 代碼中的[]執行基本的算數運算,如: #!/bin/bash a=5 b=6 result=$[a+b] #注意等號兩邊不能有空格 echo "result 爲:$result"
= 等於則爲真 != 不相等則爲真 -z字符串 字符串的長度爲零則爲真 -n字符串 字符串的長度不爲零則爲真 eg: num1="test" num2="test2" if test $num1 = $num2 then echo '兩個字符串相等!' else echo '兩個字符串不相等' fi
-e文件名 若是文件存在則爲真 -r文件名 若是文件存在且可讀則爲真 -w文件名 若是文件存在且可寫則爲真 -x文件名 若是文件存在且可執行則爲真 -s文件名 若是文件存在且至少有一個字符則爲真 -d文件名 若是文件存在且爲目錄則爲真 -f文件名 若是文件存在且爲普通文件則爲真 -c文件名 若是文件存在且爲字符型特殊文件則爲真 -b文件名 若是文件存在且爲塊文件則爲真 eg: #!/bin/bash cd /bin if test -e ./bash then echo '文件已經存在' else echo '文件不存在' fi 另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操做符用於將測試條件鏈接起來,其優先級爲:"!"最高,"-a"次之,"-o"最低。例如: #!/bin/bash cd /bin if test -e ./notFile -o -e ./bash then echo '至少有一個文件存在!' else echo '兩個都不存在!' fi