shell編程基礎(chǔ)2

一、shell腳本傳參

4.1.shell文件中輸入

echo $1 $2 $3

su test.sh one two three
打印出對應(yīng)輸入的$1 $2 $3參數(shù)one two three
也可以使用args數(shù)組方式存儲(chǔ)參數(shù)

args=("$@")
echo ${args[0]} ${args[1]} ${args[2]}

還有簡潔的方式

args=("$@")
#echo ${args[0]} ${args[1]} ${args[2]}
echo $@

二补履、if-else語句

在shell中的if控制語句很像python中的語

  1. if -then
if condition
then
    command1
    command2
    ...
    commandN
fi

2.if--else語句

if condition
then
    command1
    command2
    ...
    commandN
else
    command
fi

例如:

echo -e "Enter the name of file: \c"
read filename

if [ -e $filename ]#檢查文件是否存在
then
  echo "File found"
else 
  echo "File is not exist or not found"
fi

echo -e "Enter the name of file: \c"
read filename

if [ -f $filename ]#檢查文件是常規(guī)文件
then
  echo "File found"
else 
  echo "File is not exist or not found"
fi

echo -e "Enter the name of file: \c"
read filename

if [ -d $filename ]#-d表示directory,判斷是否是一個(gè)目錄
then
  echo "File found"
else 
  echo "File is not exist or not found"
fi

注意 -e表示是否存在
-f表示file朱躺,判斷是否是常規(guī)的文件
-d表示directory,判斷是否是一個(gè)目錄搁痛。
-e表示empty长搀,默認(rèn)文件是不為空。
3.if-then-elif-then-else

if condition1
then
    command1
elif condition2
then
    command2
else
    commandN
fi

例如:

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 "Ineligible"
fi

4.利用if在文件尾部寫入內(nèi)容
首先要判斷是不是常規(guī)文件落追,如果是盈滴,在判斷是否有寫的權(quán)限,如果有寫得權(quán)限需要輸入轿钠,并不輸入的內(nèi)容保持到文件的維度
上面可以看出這里需要嵌套if巢钓,
文件寫入需要用到cat命令 cat > file 就是覆蓋 cat >> file就是不覆蓋,直接在后面寫入新內(nèi)容

echo -e "echo -e "Enter the name of file: \c"
read filename

if [ -f $filename ]#判斷文件是否存在
then
  if [-w $filename ]#判斷寫權(quán)限
   then
    echo "type some test date. press ctrl+d to quit."
    cat >> $filename
  else
    echo "$filename do not have write permissiong"
  fi
else
  echo "$filename is not exit"
fi

2.for循環(huán)
循環(huán)一般格式為:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
dovimne

例如:

for str in This is a string
do
    echo $str
done

還有一種
for (( 表達(dá)式1疗垛; 表達(dá)式2症汹;表達(dá)式3))
do
command1
command2
command3
done
例如

t=0
for ((i=1; i<=100; i++ ))
do
  t=$(( t +i ))
done
echo $t

使用sh filename.tes這里會(huì)發(fā)現(xiàn)Syntax error: Bad for loop variable
因?yàn)閟h 命令執(zhí)行腳本的時(shí)候?qū)嶋H使用的是 dash,而 dash 不支持這種 C 語言格式的 for 循環(huán)寫法贷腕。
所以背镇,使用 bash 代替 sh 運(yùn)行腳本 bash filename.tes

3.while語句
1.常見的while語句格式

while condition
do
    command
done

例如

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

無線循環(huán)

while :
do
    command
done
或者
while true
do
    command
done
或者前面學(xué)到的for
for (( ; ; ))

4.until循環(huán),until 循環(huán)執(zhí)行一系列命令直至條件為真時(shí)停止
格式

until condition
do
    command
done

例如:打印1到9

n=1
until [ $n -ge 10 ]
do
  echo "$n"
  (( n++ ))
done

5.case
case 語句匹配一個(gè)值與一個(gè)模式,如果匹配成功泽裳,執(zhí)行相匹配的命令瞒斩。case 語句格式如:

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
注意:取值后面必須為單詞 in,每一模式必須以右括號(hào)結(jié)束涮总。取值可以為變量或常數(shù)胸囱。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開始執(zhí)行直至 ;;瀑梗。
取值將檢測匹配的每一個(gè)模式烹笔。一旦模式匹配裳扯,則執(zhí)行完匹配模式相應(yīng)命令后不再繼續(xù)其他模式。如果無一匹配模式谤职,使用星號(hào) * 捕獲該值饰豺,再執(zhí)行后面的命令。

例如:

echo 'Enter a number between 1 and 4:'
echo 'The number you entered is:'
read aNum
case $aNum in
    1)  echo 'You have chosen 1'
    ;;
    2)  echo 'You have chosen 2'
    ;;
    3)  echo 'You have chosen 3'
    ;;
    4)  echo 'You have chosen 4'
    ;;
    *)  echo 'You did not enter a number between 1 and 4'
    ;;
esac

6.跳槽循環(huán)
break 和 continue
break 命令允許跳出所有循環(huán)(終止執(zhí)行后面的所有循環(huán))
例如

while :
do
    echo -n "Enter a number between 1 and 5:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "The number you entered is $aNum!"
        ;;
        *) echo "The number you entered is not between 1 and 5! game over!"
            break
        ;;
    esac
done

continue 命令與 break 命令類似允蜈,只有一點(diǎn)差別冤吨,它不會(huì)跳出所有循環(huán),只跳出當(dāng)前循環(huán)陷寝。

while :
do
    echo -n "Enter a number between 1 and 5: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "The number you entered is $aNum!"
        ;;
        *) echo "The number you entered is not between 1 and 5!"
            continue
            echo "game over"
        ;;
    esac
done

三锅很、數(shù)組

arr=('Alice' 'Jone' 'Jack' 'Lili')
arr[4]='Alex'#添加元素

echo "${arr[@]}"#遍歷數(shù)組
echo "${arr[1]}"#單個(gè)制定位置的元素
echo "${!arr[@]}"#數(shù)組的索引查詢
echo "${#arr[@]}"#數(shù)組的長度
unset  arr[1]# 刪除數(shù)組

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末其馏,一起剝皮案震驚了整個(gè)濱河市凤跑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叛复,老刑警劉巖仔引,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異褐奥,居然都是意外死亡咖耘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門撬码,熙熙樓的掌柜王于貴愁眉苦臉地迎上來儿倒,“玉大人,你說我怎么就攤上這事呜笑》蚍瘢” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵叫胁,是天一觀的道長凰慈。 經(jīng)常有香客問我,道長驼鹅,這世上最難降的妖魔是什么微谓? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮输钩,結(jié)果婚禮上豺型,老公的妹妹穿的比我還像新娘。我一直安慰自己买乃,他們只是感情好姻氨,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著为牍,像睡著了一般哼绑。 火紅的嫁衣襯著肌膚如雪岩馍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天抖韩,我揣著相機(jī)與錄音蛀恩,去河邊找鬼。 笑死茂浮,一個(gè)胖子當(dāng)著我的面吹牛双谆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播席揽,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼顽馋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幌羞?” 一聲冷哼從身側(cè)響起寸谜,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎属桦,沒想到半個(gè)月后熊痴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聂宾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年果善,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系谐。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巾陕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纪他,到底是詐尸還是另有隱情鄙煤,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布止喷,位于F島的核電站馆类,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弹谁。R本人自食惡果不足惜乾巧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望预愤。 院中可真熱鬧沟于,春花似錦、人聲如沸植康。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至供璧,卻和暖如春存崖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睡毒。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工来惧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人演顾。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓供搀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钠至。 傳聞我的和親對象是個(gè)殘疾皇子葛虐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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