向指令碼傳遞引數

2021-09-06 03:26:25 字數 2339 閱讀 8329

1.使用$#

$ pg opt.sh

#!/bin/sh

#opt.sh

usage()

opt=$1

processid=$1

if [ $# -ne 2 ]

then

usage

exit 1

ficase $opt in

start|start) echo "starting..$processid"

;;stop|stop) echo "stopping...$processid"

;;*) usage

;;esac

$# 表示命令行的個數,執行時用

$ opt.sh start named

starting..start

$ opt.sh start

usage:'basename /home/dongjichao/bin/opt.sh' start|stop process name

2.shift命令

shift可以從左至右的選擇命令列引數,如

$ cat -n opt2.sh

1    #!/bin/sh

2    # opt2.sh

3    loop=0

4    while [ $# -ne 0 ]

5    do

6        echo $1

7        shift

8    done

$ history | tail -n 10

1541  cat opt

1542  cat opt.sh

1543  opt.sh start named

1544  opt.sh start

1545  cat -n opt2.sh

1546  history | tail 100

1547  history | tail -n 100

1548  opt2.sh file1 file2 file3

1549  history | tail -n 30

1550  history | tail -n 10

dongjichao@dongjichao:~/bin$ !1548

opt2.sh file1 file2 file3

file1

file2

file3

3.使用shift處理檔案轉換

$ cat opt3.sh

#!/bin/sh

#opt3.sh

usage()

if [ $# -eq 0 ]; then

usage

fiwhile [ $# -gt 0 ]

docase $1 in

-u|-u) echo "-u option specified"

shift

;;-l|-l) echo "-l option specifed"

shift

;;*) usage

;;esac

done

執行$ opt3.sh -u -l -k

-u option specified

-l option specifed

usage:opt3.sh -[l|u] file [files]

4.getopts

有時需要寫類似  $ 命令 -l -c 23這樣的命令,這時需要用到getopts

以下getopts指令碼接受下列選項或引數

a  設定變數all為true

h  設定變數help為true

f  設定變數file為true

v  設定變數verbose為true

$ cat getopt1.sh

#!/bin/sh

#getopt1

all=false

help=false

file=false

verbose=false

while getopts ahfgv option

docase $option in

a)all=true

echo "all is $all"

;;h)help=true

echo "help is $help"

;;f)file=true

echo "file is $file"

;;v)verbose=true

echo "verbose is $verbose"

;;esac

done

執行上面的指令碼

$ getopt1.sh -a -h  

all is true

help is true

向指令碼傳遞引數

start 在需要的時候我們可以向 perl 指令碼傳遞引數,perl 會自動將所有的引數放到陣列 argv 中,下面是乙個簡單的例子。usr bin perl use strict if argv 1 my name argv print welcome name n unix 的 cat 命令可...

awk向指令碼傳遞引數(二)

命令列引數的乙個重要限制是它們在begin過程中是不可用的。也就是說,直到首行輸入完畢以後它們才可用。為什麼?這是乙個easy混亂的部分。從命令列傳遞的引數就好像檔名稱一樣被處理。賦值操作知道這個變數 假設它是乙個檔名稱 被求值時才進行。參閱以下的指令碼。該指令碼將變數n設定為乙個命令列引數。awk...

PowerShell指令碼傳遞引數

在編寫powershell指令碼的時候,可以通過給變數賦值的方法輸出想要的結果,但這樣的話,需要改動指令碼內容。其實也可以在指令碼中定義引數,然後再在執行指令碼的時候對引數賦值,而無需改動指令碼內容。在powershell指令碼中,可以使用param 宣告引數,如下 param a,b write ...