Linux Shell用户输入--整理

shell脚本中处理linux输入主要有三种形式:

1)将他们像命令行参数一样处理,通过对应的位置参数来获取对应的输入参数

2)通过getopt和getopts这两个命令

3)通过read命令以交互的方式获取用户的输入参数

1.通过对应的位置参数获取

  shell中的位置参数的计算是从0开始的依次往后加1对应用户的输入参数;例如$0对应的是用户的程序名,$1对应的第一个参数,$2为第二个参数,依次类推直到第10个参数以后则应用花括号将对应的位置参数包裹的获取方式为${10}。

  $#,$*,$@在为参数中有着特殊的含义:

  $#统计输入的参数的总数这个总数不包含程序名

  $*将用户的输入所有参数当成一个单词返回

  $@将所有变量保存为单个单词。

但是${$#}这中方式获取最后一个输入参数将返回一个错误的值,正确的方式为${!#}

  通过shift命令可以将对应参数的参数向前移动一位通过shift可以遍历用户输入的参数

count=1

while [ -n "$1" ]

do

       echo "Parameter #$count = $1"

       echo "Parameter \$0 #$count=$0"

       count=$[ $count + 1 ]

       shift

done

shift将$2后一位移动到了$1而$1上的参数将会被删除而不会被移到$0上面。

2)getopt和getopts命令

  getopt和getopts允许用户可以按照linux的命令格式输入数据,getopt和getopts的使用格式大体相似。getopt命令将原命令参数格式化传给set命令替换原始的命令行参数。使用的格式如下:

  set -- `getopt ab:c "$@"` :表示对应的b选项后面需要带参数

  同时getopt是以--符号来区分选项参数和输入的传输的。

  getopt参数在获取的过程也还是通过对应的为参数获取的。

  对应的事列如下:

 set -- `getopt -q ab:c "$@"`

while [ -n "$1" ]

do

      case "$1" in

       -a) echo "Found the -a option";;

       -b) param=$2

           echo "Found the -b option,with parameter value $param"

          shift;;

       -c) echo "Found the -c option";;

       --) shift

          break;;

      *)echo "$1 is not an option";;

       esac

       shift

done

count=1

for param in "$@"

do

       echo "Parameter #$count: $param"

       count=$[ $count + 1 ]

done 

输入-ac –b test1 test2 经getopt格式化后输出为-a -c -b test1 -- test2。

getopts与getopt略有不同。如果选项需要跟一个参数,这个参数将会保存到OPTARG环境变量中。OPTIND环境变量保存了参数列表中getopts正在处理的参数位置。

对应的事列如下:

while getopts ab:c opt

do     

        case "$opt" in

        a) echo "Found the -a option";;

        b) echo "Found the -b option,with value $OPTARG";;

        c) echo "Found the -c option";;

        *) echo "Unknow option: $opt";;

        esac

done

shift $[ $OPTIND - 1]

count=1

for param in "$@"

do

        echo "Parameter $count:$param"

        count=$[ $count + 1 ]

done

3) 通过read命令以交互的方式获取用户的输入参数

 read -t 5 -p "Enter a numer:" opt

-t 设置超时时间

-p输出交互字符串提示符,用户的输入将被保存到opt变量中。如果没有设置opt变量,用户的输入变量将会保存到$REPLY环境变量中

-s将屏蔽用户输入的回想。

count=1

cat testcommand.sh | while read line

do

        echo "Line $count: $line"

        count=$[ $count + 1 ]

done

read来读取文件里保存的数据,read命令每次会从文件中读取一行文本。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。