來說說字串的空值,在shell中,null與""均為空值,由於shell中的一大特性------變數會在指令碼真正執行前替換成其對應的值,並且shell相比於c等語言有著更大的寬容度,使得即使判斷空值這麼簡單的事也會出現諸多bug。
本來判斷是否為空用[ -z $str ]即可,但是如果str為null,則由於shell的特性,判斷式在判斷前會變成[ -z ],$?為0,[ -n $str ]同樣的道理,$?也為0,因此判斷時都要用[ -z "$str" ]比較保險。但是總覺得shell這東西限制少寬容度大,這樣判斷邏輯亂亂的。
於是,大致搜了一下網上判斷空字串方法。
1、鳥哥書上方法
#!/bin/bash
str=""
str=$ #如果str為空或者沒有賦值,那麼str的值賦為1
if [[ x$str -eq x"1" ]];then
echo "str is null"
fi
2、知乎上方法
[ $ -eq 0 ] && echo "str1:null"
[ _$ = _ ] && echo "str1:null" 0
3、
[ -z $str ] || [ $str = "" ]
個人感覺這三種都還行,挑一種夠用就好
再來說說stty命令
stty -g 以stty可讀方式列印當前設定
stty -a 以易讀方式列印當前設定
stty -echo 取消回顯,這點在設定使用者輸入密碼不回顯時可用。
stty是用於對終端進行配置的,不過在指令碼中配置stty時,最好先存好之前的stty -g,修改一系列的設定後方便恢復成原始stty設定。 shell注意點(一)
整理最近shell的想法,以免想過之後又忘記。首先還是講講引號。單引號強引用,雙引號弱引用很好理解。不過這兩個引號的使用還是很值得細究的。雙引號僅能夠解釋 反單號 美元符號 和 轉義符號 應用也與這三者有關。雙引號與反單號使用較頻繁,由於反單號用於提示shell需要處理乙個命令,結果超過乙個字串,通...
shell指令碼注意點
1.等號兩邊不能有空格,例如 獲取七天前的日期 before 7 day date d 7 days ago y m d 2.自定義函式只能返回數值,不能返回陣列 字串等內容。如果需要生成字串等結果,可以宣告為全域性變數,然後將值賦給全域性變數,這樣就可以在函式外訪問 get string 返回錯誤...
做shell程式設計的注意點
1 變數前加 2 倒引號 執行括號內命令 3 賦值時等號兩邊不可以有空格 取值包含空格,必須用雙引號括起來 shell變數可以用大小寫字母,區分大小寫 4 echo命令可以顯示單個變數取值,變數名前加 5 傳送給shell程式的位置引數的數量 6 0 shell程式的名稱 7 在執行shell指令碼...