----來源於網絡整理。
1、shell編程只有一種數據類型:字符串類型
2、變量:
1)環境變量:(類似全局變量)
printenv 顯示當前shell的環境變量(或者 env 命令)
2)本地變量:(類似局部變量)
可以自己定義變量:
VAR=hello ----->定義了一個變量---->默認是本地變量
echo $VAR ----->打印變量的值,變量前面要加$
將本地變量變爲環境變量:
export VAR
env |grep $VAR -------->查看變量,已經能看到了。
有無$的區別:有的話,找的是變量的值,沒有的話,找的是變量的名。
unset 變量 ------->刪除定義的本地變量或環境變量。
3、文件名代換
* 任意多字符
?匹配一個字符
[] 匹配括號中任意一個字符的一次出現-----[]只佔一個字符
ls file[0-9].c
4、命令代換
方法1:“`”----tab建上的那個反引號
VAL=`date`
這樣 echo $VAL 就能執行date 命令
方法2:將命令用$()括起來
VAL=$(date)
5、算數代換
VAL=10
echo $(($VAL+1))
echo $((VAL+1))
echo $[VAL+1] -------->最簡單
echo $[$VAL+1]
四種方法效果一樣。
echo $[2#10+1] 二進制10 +十進制1
6、轉義字符
文件名中有特殊字符需要轉義 touch \$file
rm 的時候,也需要在文件名中加轉義字符
特殊情況:
touch ---abc ------>帶-的情況
方法一:
touch ./---abc
rm ./---abc ----->否則刪不掉。
方法二:
touch -- -abc
rm -- -abc
7、單引號
當輸出的字符串需要添加“”的時候,此時就需要用單引號把字符串引起來。----使用轉義字符也能做到
單引號,會將其中的內容原樣輸出,即便是變量,也不會當做變量
8、雙引號
雙引號一般情況下是 與 不加雙引號的情況一樣的。
特殊情況:
echo "$VAL" ,當VAL= 的形式是,即VAL的值爲空, VAL的值用來比較時,不加雙引號會出錯,所以,加“”更安全一些。
9、條件測試
echo $? ---------->打印出上一個執行進程的退出的值。
test 或 [ 命令測試一個條件是否成立,成立返回0,不成立返回1
形式如下例子:
var=100
test $var -gt 100
echo $? --------->打印出返回值。
gt--->大於
ge--->大於等於
lt---->小於
le---->小於等於
eq--->等於
ne--->不等於
-d DIR --->判斷是否是目錄
-f FILE ---->判斷是否是普通文件,
-z STRING---->判斷字符串長度是否爲0
-n STRING---->判斷字符串長度是否不爲0
string1 = string2 ---->兩個字符串相同爲真,返回0----->等號兩邊必須要有空格
string1 != string2 ---->兩個字符串不相同爲真,返回0-----> !=兩邊必須要有空格
test命令可以替換爲[命令
[ -f file.c ]----------->[ 後邊有空格 ]前邊有空格
因爲這是命令與 參數的關係。
示例:
var=hello ------------>字符串的長度不爲空,變量不加雙引號也沒有關係。
[ -n $var ]
var= ------------->字符串的長度爲空,變量必須加雙引號,否則出錯。
[ -n "$var" ]
echo $?----------------->爲假,返回1
[ -n $var ]
echo $?----------------->返回0------------>與實際情況不符。
小結:取變量值的時候,儘量加“”,肯定不會出錯。