1.來自命令列的引數
./test 10 20 40 這些變數被成為位置引數. $0為程式名, $1為第乙個引數, $2為第二個引數.....
2.特殊的引數變數
引數計數: $# 表示來自命令列的引數個數
所有引數: $* 和 $@在乙個變數中包含所有命令列引數. $*把所有引數當場乙個單詞處理. $@將所有引數作為同乙個字串中的多個單詞處理.
位移: shift 將每個引數變數左移乙個位置. ( $0不變, 丟棄原$1變數 )
3.處理選項
看乙個例子
#!/bin/bash
# extracting command line options
while [ -n "$1" ]
do case "$1" in
-a) echo "-a option is in command line" ;;
-b) echo "-b option is in command line" ;;
-c) echo "-c option is in command line" ;;
*) echo "$1 is not a option" ;;
esac
shift
done
輸入輸出:
allen@ubuntu:~/homework$ ./shell.sh -a -b -c -d
-a option is in command line
-b option is in command line
-c option is in command line
-d is not a option
從引數中分離選項:
有時會遇到即需要引數又需要選項的情況, 通過乙個特殊字元碼將二者分離: 雙破折號 --
#!/bin/bash
while [ -n "$1" ]
do case "$1" in
-a) echo "-a option is in command line" ;;
-b) echo "-b option is in command line" ;;
-c) echo "-c option is in command line" ;;
--) shift
break ;;
*) echo "$1 is not a option" ;;
esac
shift
done
count=1
for param in $@
do echo "parameter #$count: $param"
count=$[ $count + 1 ]
done
輸入輸出:
allen@ubuntu:~/homework$ ./shell.sh -a -b -c -- v1 v2 v3
-a option is in command line
-b option is in command line
-c option is in command line
parameter #1: v1
parameter #2: v2
parameter #3: v3
處理帶值的選項:
#!/bin/bashwhile [ -n "$1" ]
do case "$1" in
-a) echo "-a option is in command line" ;;
-b) param="$2"
echo "-b option with parameter value $param"
shift 2;;
-c) echo "-c option is in command line" ;;
--) shift
break ;;
*) echo "$1 is not a option" ;;
esac
shift
done
count=1
for param in $@
do echo "parameter #$count: $param"
count=$[ $count + 1 ]
done
輸入輸出:
allen@ubuntu:~/homework$ ./shell.sh -a -b v1 -c -- v2 v3
-a option is in command line
-b option with parameter value v1
parameter #1: v2
parameter #2: v3
使用getopt命令:
getopt options optstring parameters
選項字串(optstring)是處理的關鍵,它定義命令列中的有效選項字母,還定義哪些選項字母需要引數值.
首先,在選項字串(optstring)中列出將在指令碼中用到的每個命令列選項字母.然後,在每個需要引數值的選項字母後面放置乙個冒號.
allen@ubuntu:~$ getopt ab:cd -a -b v3 -cd v1 v2
-a -b v3 -c -d -- v1 v2
在指令碼中使用getopt:
通過set命令處理shell中的各種變數 ---- 將原始指令碼命令列引數送給getopt,然後將getopt命令的輸出送給set命令
set -- `getopt -q ab:cd "$@"`
4.獲取使用者輸入
read命令接受標準輸入,或其他檔案描述符輸入
#!/bin/bash
echo -n "enter your name:"
read name
echo "hello $name, welcome!"
allen@ubuntu:~/learnlinux$ ./read.sh
enter your name:allen
hello allen, welcome!
read輸入多個變數:
read -p "enter your name: " first last
通過read讀取檔案:
每用一次read命令都會讀取檔案中的一行文字,當檔案中沒有可讀的行時,read命令將以非零退出狀態退出
#!/bin/bash
count=1
cat test | while read line
do echo "line $count: $line"
count=$[ $count + 1 ]
done
echo "finished read the file"
Linux shell 批量建立使用者
可以使用newusers命令來批量完成,該命令需要先行建立新使用者列表,該列表需要和 etc passwd檔案格式相同,格式如下 test1 x 501 501 test1 home test1 bin bash 新使用者列表建立完畢之後,使用newusers 列表檔案.txt 的方式來批量建立 n...
C 防止誤輸的處理
在c 輸入的時候,經常需要判斷輸入的值是否正確。include int fun min const int a,const int b int fun max const int a,const int b,const int min int main cout 請輸入第二個整數 b b 1 min...
Linux shell簡單建立使用者指令碼
root wei shell vim user.sh bin bash 注釋 useradd hei echo root passwd stdin hei dev null echo hei使用者建立完成,預設密碼是 root 1 利用bash執行 root wei shell bash user....