Shell編程入門

hello world

#!/bin/bash

echo "hello world"

變量

定義變量:variable_name=variable_value
name="zhangsan"
使用變量:$variable_name
echo $name
替換
echo "name: $name"
只讀狞贱、取消變量
readonly name
unset name

特殊變量

變量 描述
$0 當前腳本的文件名
$n 第一個參數(shù)是$1菩颖,第二個參數(shù)是$2
$# 參數(shù)的數(shù)量
$* All the arguments are double quoted.所有參數(shù)
$@ All the arguments are individually double quoted.所有參數(shù)
$? 上一個命令的退出狀態(tài)
$$ 當前shell的進程號
$! 最后一個后臺命令的進程號
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

運算

val=`expr a + b`

記下有以下幾點:

  • 運算符和表達式之間必須有空格蚪缀,例如2+2是不正確的赴捞,因為它應該寫成2 + 2作谭。
  • ``硼讽,稱為倒逗號之間應包含完整的表達捉偏。
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 -eq $b ]
then
   echo "$a -eq $b : a is equal to b"
else
   echo "$a -eq $b: a is not equal to b"
fi

其他運算符

運算符 描述
-eq equal ==
-ne not equal !=
-gt greater than >
-lt less than <
-ge greater equal >=
-le less equal <=
! NOT !
-o OR
-a AND &&

字符串比較

運算符 描述
$a = $b "$a = $b : a is equal to b"
$a != $b "$a != $b : a is not equal to b"
-z "$a" "-z $a : string length is zero"
-n "$a" "-n $a : string length is not zero"
$a "$a : string is not empty"

if

a=10
b=20
if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi

case

FRUIT="kiwi"
case "$FRUIT" in
   "apple") echo "Apple pie is quite tasty."
   ;;
   "banana") echo "I like banana nut bread."
   ;;
   "kiwi") echo "New Zealand is famous for kiwi."
   ;;
esac

while

a=0
while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

for

for var in 0 1 2 3 4 5 6 7 8 9
do
   echo $var
done

until

a=0
until [ ! $a -lt 10 ]; do
    a=`expr $a + 1`
    echo $a
done

跳出循環(huán)break、continue

執(zhí)行命令:command

DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS"

${var} 等同$var
${var:-word} 如果var是null或unset农渊,默認值
${var:=word} 如果var是null或unset患蹂,默認值,且賦值給var
${var:?message} 如果var為null或unset砸紊,則將消息打印為標準錯誤
${var:+word} 如果var存在传于,默認值

引用

元字符:* ? [ ] ' " $ ; & ( ) | ^ < > new-line space tab

echo "I have $1200" # 無法正確輸出,需要:echo "I have \$1200"
echo 'I have $1200'

輸入輸出重定向

$ echo line 1 > users # 覆蓋之前的數(shù)據(jù)
$ echo line 1 >> users # 追加到之前數(shù)據(jù)后

丟棄輸出:
command > /dev/null
同時放棄輸出和錯誤輸出醉顽,2代表stderr和1代表STDOUT
command > /dev/null 2>&1

pgm > file pgm命令的輸出重定向到file
pgm < file 程序pgm讀取file的輸入
pgm >> file 將pgm命令的輸出追加到file中
| 從一個程序或進程中獲取輸出沼溜,并將其發(fā)送給另一個程序

函數(shù)

# 函數(shù)定義
Hello () {
   echo "Hello World $1 $2"
   return 10
}
# 方法調用
Hello
# 上一個命令的返回值
ret=$?
echo "Return value is $ret"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市游添,隨后出現(xiàn)的幾起案子系草,更是在濱河造成了極大的恐慌,老刑警劉巖否淤,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悄但,死亡現(xiàn)場離奇詭異,居然都是意外死亡石抡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門助泽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啰扛,“玉大人,你說我怎么就攤上這事嗡贺∫猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵诫睬,是天一觀的道長煞茫。 經常有香客問我,道長,這世上最難降的妖魔是什么续徽? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任蚓曼,我火速辦了婚禮,結果婚禮上钦扭,老公的妹妹穿的比我還像新娘纫版。我一直安慰自己,他們只是感情好客情,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布其弊。 她就那樣靜靜地躺著,像睡著了一般膀斋。 火紅的嫁衣襯著肌膚如雪梭伐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天仰担,我揣著相機與錄音籽御,去河邊找鬼。 笑死惰匙,一個胖子當著我的面吹牛技掏,可吹牛的內容都是我干的。 我是一名探鬼主播项鬼,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哑梳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绘盟?” 一聲冷哼從身側響起鸠真,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎龄毡,沒想到半個月后吠卷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡沦零,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年祭隔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片路操。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疾渴,死狀恐怖,靈堂內的尸體忽然破棺而出屯仗,到底是詐尸還是另有隱情搞坝,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布魁袜,位于F島的核電站桩撮,受9級特大地震影響敦第,放射性物質發(fā)生泄漏。R本人自食惡果不足惜店量,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一芜果、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垫桂,春花似錦师幕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疼鸟,卻和暖如春后控,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背空镜。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工浩淘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吴攒。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓张抄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親洼怔。 傳聞我的和親對象是個殘疾皇子署惯,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關系镣隶?...
    Zero___閱讀 3,150評論 3 49
  • Shell是什么极谊? shell本身是一個命令解釋器,介于操作系統(tǒng)的內核(kernel)態(tài)和用戶態(tài)之間安岂,可以執(zhí)行系統(tǒng)...
    echoworlding閱讀 27,894評論 11 81
  • shell編程: shell既是一種命令語言域那,又是一種程序設計語言咙边。 bash 內定的shell 行命令擴充 \ ...
    莫名_百通閱讀 466評論 0 1
  • 一,shell題記 不懂shell的程序員不是好程序員琉雳,學習shell是為了自動化样眠,使用自動化可以非常有效的提高工...
    架構師小秘圈閱讀 8,725評論 3 70
  • 圖形化界面的Shell 幼兒園的小孩,可以面對圖形化界面的電腦,手持鼠標,愉快的上網沖浪 字符型界面的Shell ...
    zhaoolee閱讀 3,024評論 2 15