shell指令碼檔案引數

2021-08-26 12:56:30 字數 2221 閱讀 6884

本文編輯自:

當我們我們向

指令碼檔案傳遞引數

可以通過

$1,$2

等特殊變數。很方便,但是有些限制,就是不能超過9個引數。通過使用

shift

getopts

我們能更方便地提取引數。

一、shift

通過使用

shift

,我們將

shell指令碼檔案

的引數起點從左向右移。

在shift命令中可以給乙個引數,以表示對shell指令碼檔案的傳入引數啟動從左向右移動多少。不給引數的話,表示移動一位。

例項1:

test.sh檔案

#!/bin/sh

# shift_sample

if[$#

-lt 1 ];then

echo "too few params"

exit 1

fi

while[$#

-ne 0 ]

doecho $1

shift

done

在命令列下輸入:

sh test.sh a b c

輸出結果如下: a

b c

注意:「

$#」表示shell指令碼檔案傳入引數的個數。

二、getopts

如果你的指令碼命令後有一些選項開關,比如-i,

-c等等,這個時候使用shift來挨個檢視比較麻煩。而用getopts則比較方便。getopts使用格式如下:

getopts format_string variable

例項2:

test.sh檔案

#getopts_sample

if [

$# -lt 1

];then

echo "too few params"

exit 1

fiwhile

getopts hv option

docase

$optionin

h)echo "this is help information"

shift

;;v)

echo "the version is 1.0.0"

shift

;;--)echo the option is end

shift

;;esac

done

echo $1

這段指令碼允許兩個引數選項,分別是-h,-v,使用的時候可以分開來寫,像-h -v,也可以連在一起,像-hv

執行命令「

sh test.sh -h -v hello」或「

sh test.sh -hv hello

」,你將得到如下結果:

this is help information

the version is 1.0.0

hello

如果選項需要輸入值,則在引數選項後面加上「

: 」,比如:getopts hvc: option指令碼在讀到-c的時候,會把它的引數值儲存在$optarg變數中。

例項3:

test.sh檔案

#!/bin/sh

#getopts_sample

if [

$# -lt 1

];then

echo "too few params"

exit 1

fiwhile

getopts hv:t: option

docase

$optionin

h)echo "this is option h"

shift 1

;;v)

echo "this is option v.and the var is " $optarg

shift 2

;;t)

echo "this is option t.and the var is " $optarg

shift 2

;;esac

done

echo $1

執行命令「

sh test.sh -h -v vv -t tt hello

」將得到如下結果:

this is option h

this is option v.and the var is vv

this is option t.and the var is tt

hello

Shell指令碼檔案練習

使用if條件語句來判斷 media cdrom檔案是否存在,若存在就結束條件判斷和整個shell指令碼,反之則去建立這個目錄 vim mkcdrom.sh bin bash ping c 3 i 0.2 w 3 1 dev null if eq 0 then echo host 1 is on li...

shell指令碼讀寫文字檔案

通過讀寫臨時檔案來完成核心與介面的互動是目前接觸的比較常用手段。而寫操作的格式如何呢。mdate date r d m y logfile tmp hdstatuslog.log echo disk is good mdate logfile 寫到檔案的格式就會變成這樣 dev sdc is goo...

shell 指令碼檔案追蹤與 debug

scripts 在執行之前,最怕的就是出現語法錯誤的問題了!那麼我們如何 debug 呢?有沒有辦法不需要透過直接執行該 scripts 就可以來判斷是否有問題呢?呵呵!當然是有的!我們就直接以 bash 的相關引數來進行判斷吧!sh或bash nvx scripts.sh 選項與引數 n 不要執行...