Shell腳本基礎(chǔ)

1.Shell變量

# 變量的聲明 
name="zhangsan" 
for file in `ls /etc` 
或
for file in $(ls /etc) 

# 變量的調(diào)用 
echo $name 
echo ${name} 

for skill in Ada Coffe Action Java; do 
echo "I am good at ${skill}Script" 
done 

# 只讀變量 /bin/sh: NAME: This variable is read only. 
url="https://www.google.com" 
readonly url 
url="https://www.runoob.com" 

# 刪除變量 
unset name

2.Shell字符串

# 聲明字符串 
str1="hello world 1" 
str2='hello world 2' 

# 字符串拼接--雙引號 
name='sunwukong' 
name1="hello, "$name" !" 
name2="hello, ${name} !" 

# 字符串拼接--單引號 
passwd='123456' 
passwd1='hello, '$passwd' !' 
passwd2='hello, ${passwd} !' 
echo $passwd2 # hello, ${passwd} ! 

# 字符串的長度 
email="123456@qq.com" 
echo ${#email} 
echo ${email:1:4}

3.Shell數(shù)組

# 定義數(shù)組 括號來表示數(shù)組,數(shù)組元素用"空格"符號分割開 
數(shù)組名=(值1 值2 ... 值n) 
favs=("足球" "藍球" "乒乓球球" "保齡球") 

# 讀取數(shù)組 ${數(shù)組名[下標]} 
fav=${favs[1]} 

# 使用 @ 符號可以獲取數(shù)組中的所有元素 
echo ${favs[@]} 

# 獲取數(shù)組的長度 
length1=${#favs[@]} 
length2=${#favs[*]}

4.Shell注釋

#-------------------------------------------- 
# 這是一個注釋 
# author: 
# site: 
#-------------------------------------------- 
##### 服務(wù)器配置-start #####
#
#
#
#
# 
########## 服務(wù)器配置-end #####

# 特殊的多行注釋 
:<<EOF 
注釋內(nèi)容... 
注釋內(nèi)容... 
注釋內(nèi)容... 
EOF 

:<<! 
注釋內(nèi)容... 
注釋內(nèi)容... 
注釋內(nèi)容... 
!

5.Shell參數(shù)傳遞

參數(shù)處理 參數(shù)說明
$# 傳遞到腳本的參數(shù)個數(shù)
$* 以一個單字符串顯示所有向腳本傳遞的參數(shù)
$$ 腳本運行的當前進程ID號
$! 后臺運行的最后一個進程的ID號
$? 顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤
$0 執(zhí)行的文件名

5.Shell運算符

---------------------算數(shù)運算符------------------------
#!/bin/bash 
a=10 
b=20 

val=`expr $a + $b` 
echo "a + b : $val" 

val=`expr $a - $b` 
echo "a - b : $val" 

val=`expr $a \* $b` 
echo "a * b : $val" 

val=`expr $b / $a` 
echo "b / a : $val" 

val=`expr $b % $a` 
echo "b % a : $val" 

if [ $a == $b ] 
then
  echo "a 等于 b" 
fi

if [ $a != $b ] 
then
  echo "a 不等于 b" 
fi

---------------------關(guān)系運算符------------------------
if [ $a -eq $b ] 
then
  echo "$a -eq $b : a 等于 b" 
else
  echo "$a -eq $b: a 不等于 b" 
fi

if [ $a -ne $b ] 
then
  echo "$a -ne $b: a 不等于 b" 
else
  echo "$a -ne $b : a 等于 b" 
fi

if [ $a -gt $b ] 
then
  echo "$a -gt $b: a 大于 b" 
else
  echo "$a -gt $b: a 不大于 b" 
fi

if [ $a -lt $b ] 
then
  echo "$a -lt $b: a 小于 b" 
else
  echo "$a -lt $b: a 不小于 b" 
fi

if [ $a -ge $b ] 
then
  echo "$a -ge $b: a 大于或等于 b" 
else
  echo "$a -ge $b: a 小于 b" 
fi

if [ $a -le $b ] 
then
  echo "$a -le $b: a 小于或等于 b" 
else
  echo "$a -le $b: a 大于 b" 
fi
---------------------布爾運算符------------------------
if [ $a != $b ] 
then
  echo "$a != $b : a 不等于 b" 
else
  echo "$a == $b: a 等于 b" 
fi

if [ $a -lt 100 -a $b -gt 15 ] 
then
  echo "$a 小于 100 且 $b 大于 15 : 返回 true" 
else
  echo "$a 小于 100 且 $b 大于 15 : 返回 false" 
fi

if [ $a -lt 100 -o $b -gt 100 ]
then
  echo "$a 小于 100 或 $b 大于 100 : 返回 true" 
else
  echo "$a 小于 100 或 $b 大于 100 : 返回 false" 
fi

if [ $a -lt 5 -o $b -gt 100 ] 
then
  echo "$a 小于 5 或 $b 大于 100 : 返回 true" 
else
  echo "$a 小于 5 或 $b 大于 100 : 返回 false" 
fi

---------------------邏輯運算符------------------------
if [[ $a -lt 100 && $b -gt 100 ]] 
then
  echo "返回 true" 
else
  echo "返回 false" 
fi

if [[ $a -lt 100 || $b -gt 100 ]] 
then
  echo "返回 true" 
else
  echo "返回 false" 
fi
---------------------字符串運算符------------------------
a="abc" 
b="efg" 

if [ $a = $b ] 
then
  echo "$a = $b : a 等于 b" 
else
  echo "$a = $b: a 不等于 b" 
fi

if [ $a != $b ] 
then
  echo "$a != $b : a 不等于 b" 
else
  echo "$a != $b: a 等于 b" 
fi

if [ -z $a ] 
then
  echo "-z $a : 字符串長度為 0"
else
  echo "-z $a : 字符串長度不為 0" 
fi

if [ -n "$a" ] 
then
  echo "-n $a : 字符串長度不為 0" 
else
  echo "-n $a : 字符串長度為 0" 
fi

if [ $a ] 
then
  echo "$a : 字符串不為空" 
else
  echo "$a : 字符串為空" 
fi

---------------------文件測試運算符------------------------
file="/var/node/test.sh" 

if [ -r $file ] 
then
  echo "文件可讀" 
else
  echo "文件不可讀" 
fi

if [ -w $file ] 
then
  echo "文件可寫" 
else
  echo "文件不可寫" 
fi

if [ -x $file ] 
then
  echo "文件可執(zhí)行" 
else
  echo "文件不可執(zhí)行" 
fi

if [ -f $file ] 
then
  echo "文件為普通文件" 
else
  echo "文件為特殊文件" 
fi

if [ -d $file ] 
then
  echo "文件是個目錄" 
else
  echo "文件不是個目錄" 
fi

if [ -s $file ] 
then
  echo "文件不為空" 
else
  echo "文件為空" fi

---------------------test命令------------------------
num1=100 
num2=100 
if test $[num1] -eq $[num2] 
then
  echo '兩個數(shù)相等!' 
else
  echo '兩個數(shù)不相等!' 
fi

6.Shell流程控制

---------------------if------------------------
a=10 
b=20 
if [ $a == $b ] 
then
  echo "a 等于 b" 
elif [ $a -gt $b ] 
then
  echo "a 大于 b" 
elif [ $a -lt $b ] 
then
  echo "a 小于 b" 
else
  echo "沒有符合的條件" 
fi

---------------------case------------------------
echo '輸入 1 到 4 之間的數(shù)字:' 
echo '你輸入的數(shù)字為:' 
read num 
case $num in 
1) echo '你選擇了 1' 
;;
2) echo '你選擇了 2' 
;;
3) echo '你選擇了 3' 
;;
4) echo '你選擇了 4' 
;;
*) echo '你沒有輸入 1 到 4 之間的數(shù)字' 
;; 
esac
---------------------for------------------------
for loop in 1 2 3 4 5 
do 
  echo "The value is: $loop" 
done 

for str in 'This is a string','hello moto' 
do 
  echo $str 
done
---------------------while------------------------
#有限循環(huán)
int=1 
while(( $int<=5 )) 
do 
  echo $int 
  let "int++" 
done 

# 無限循環(huán) 
while true 
do 
  command 
done
---------------------break------------------------
while : 
do 
  echo -n "輸入 1 到 5 之間的數(shù)字:" 
  read aNum 
  case $aNum in 
    1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!" 
    ;;
    *) echo "你輸入的數(shù)字不是 1 到 5 之間的! 游戲結(jié)束" 
        break 
    ;; 
  esac 
done
---------------------continue------------------------
while : 
do 
  echo -n "輸入 1 到 5 之間的數(shù)字:" 
  read aNum 
  case $aNum in 
    1|2|3|4|5) echo "你輸入的數(shù)字為 $aNum!" 
    ;;
    *) echo "你輸入的數(shù)字不是 1 到 5 之間的! 游戲結(jié)束" 
        continue
         echo "游戲結(jié)束" 
    ;; 
  esac 
done

7.Shell函數(shù)

#!/bin/bash 
## 第一個函數(shù)------------------------------ 
demoFun(){ 
  echo "這是我的第一個 shell 函數(shù)!" 
}
echo "-----函數(shù)開始執(zhí)行-----" 
demoFun 
echo "-----函數(shù)執(zhí)行完畢-----" 

## 函數(shù)返回值------------------------------ 
funWithReturn(){ 
  echo "這個函數(shù)會對輸入的兩個數(shù)字進行相加運算..." 
  echo "輸入第一個數(shù)字: " 
  read aNum 
  echo "輸入第二個數(shù)字: " 
  read anotherNum 
  echo "兩個數(shù)字分別為 $aNum 和 $anotherNum !" 
  return $(($aNum+$anotherNum)) 
}
funWithReturn 
# 函數(shù)返回值在調(diào)用該函數(shù)后通過 $? 來獲得。 
echo "輸入的兩個數(shù)字之和為 $? !"

## 函數(shù)參數(shù)------------------------------ 
funWithParam(){ 
  echo "第一個參數(shù)為 $1 !" 
  echo "第二個參數(shù)為 $2 !" 
  echo "第十個參數(shù)為 $10 !" 
  echo "第十個參數(shù)為 ${10} !"
  echo "第十一個參數(shù)為 ${11} !" 
  echo "參數(shù)總數(shù)有 $# 個!" 
  echo "作為一個字符串輸出所有參數(shù) $* !" 
}
funWithParam 1 2 3 4 5 6 7 8 9
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內(nèi)容