shell腳本學習心得


近來主要搗鼓ubuntu,大多數項目中都用到了sh腳本作為啟動腳本等,以前只是大概明白如何使用,今天需要自己修改並運行腳本就碰到了很多問題,所以決定靜下心來學習一下shell腳本,學習了幾個小時,現將一些要點總結如下,以供以后翻看或者供入門人員參考。

 

  • 第一行
這里指的是腳本第一行,一般腳本第一行都是
#!/usr/bin/env bash
這句話的意思是告訴操作系統用哪個命令來解析腳本,一般不用改變
  • 腳本(函數)參數
運行xx.sh 1 2 3后
$*為"1 2 3"(一起被引號包住)
$@為"1" "2" "3"(分別被包住)
$#為3(參數數量)
注:如果以上字符出現在函數里就是函數的輸入
  • 控制語句
    • if

“if” 表達式如果條件為真則執行then后面的部分:

if ….; then

….

elif ….; then

….

Else

….

fi

大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…

通常用” [ ] “來表示條件測試。注意這里的空格很重要。要確保方括號的空格。

[ -f "somefile" ] :判斷是否是一個文件

[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行權限

[ -n "$var" ] :判斷$var變量是否有值

[ "$a" = "$b" ] :判斷$a和$b是否相等

[ -d "$f" ]  判斷f這個變量的值是否是個文件夾
 
         
  • for循環
for TIF in $(ls $LAYERS)
do
INPUT=file:$($LAYERS/$TIF)
echo $INPUT
done
ls $LAYERS表示列出文件夾下所有文件,所以這是個集合,for循環遍歷集合里所有文件,TIF為循環變量
  • 操作符
    • &&
&&意思是如果左邊成立執行右邊相當於
如:dir=$(cd "$dir" && /bin/pwd);
這句話的意思是如果cd dir變量的值沒有錯誤即dir變量所代表的文件夾路徑正確,則執行/bin/pwd,即輸出全路徑 
[ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”  [  ]里面表示一種判斷
 
  • 變量定義
LAYERNAME="SRTM"
無需申明但是=前后不能有空格,使用的時候$LAYERNAME 或者 ${LAYERNAME}
  • 函數
    •  定義函數
realpath ()
{
f=$@;
echo "$f"
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
函數中的echo表示返回值,如果有多個echo最終輸出會拼接起來。函數中的$@等表示函數的參數
    • 使用函數
只需使用 realpath $LAYERS即可,$LAYERS為變量,realpath后面可以跟任意數量的參數以空格隔開,這些參數可以被realpath中的$@全部接受。其實echo就是個函數
以上就是我所學到的shell腳本編寫語法,不足之處還請大家補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM