linux shell 處理使用者輸入

2021-06-22 14:08:23 字數 3609 閱讀 7829

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/bash

while [ -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....