Linux shell 脚本处理用户输入(命令行选项参数、用户输入) 您所在的位置:网站首页 北京观夜景去哪儿 Linux shell 脚本处理用户输入(命令行选项参数、用户输入)

Linux shell 脚本处理用户输入(命令行选项参数、用户输入)

2023-08-07 13:13| 来源: 网络整理| 查看: 265

shell 脚本处理用户输入 一、命令行参数

向shell脚本中传递数据的最基本方式就是命令行参数。允许在运行脚本时向命令添加数据。如:

zzz@ubuntu:~/my_learning$ ./test_cmd 10 20

读取位置参数 bash shell 会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。位置参数变量是标准的数字:$0是程序名,$1是第一个参数,$2是第二个参数,以此类推。 如果 shell 脚本中使用命令行参数,但执行时未提供参数,会出现问题。所以在使用参数前一定要检查其中是否存在数据。

zzz@ubuntu:~/my_learning$ cat test.sh #!/bin/bash echo "File name is $0" if [ -n "$1" ] then echo "The \$1 is $1" else echo "\$1 未提供." fi zzz@ubuntu:~/my_learning$ ./test.sh 10 File name is ./test.sh The $1 is 10 zzz@ubuntu:~/my_learning$ ./test.sh File name is ./test.sh $1 未提供. zzz@ubuntu:~/my_learning$

特殊参数变量

$# : 含有脚本运行时携带的命令行参数的个数。$* : 将命令行上提供的所有参数当作一个单词保持。这个单词包含了命令行中出现的每一个参数值。$@: 将命令行上提供的所有参数作为一个字符串上多个独立的单词,可用于遍历所有的参数值。 zzz@ubuntu:~/my_learning$ cat test.sh #!/bin/bash echo "$0 参数个数:$#" echo "\$* 遍历输出:" for val in "$*" do echo "$val" done echo "\$@ 遍历输出:" for val in "$@" do echo "$val" done zzz@ubuntu:~/my_learning$ ./test.sh 10 20 ./test.sh 参数个数:2 $* 遍历输出: 10 20 $@ 遍历输出: 10 20 zzz@ubuntu:~/my_learning$

shift 移动变量 shift 命令可以移动操作命令行参数: $3的值赋值给$2,$2的值赋值给$1,$1的值删除。

count=1 while [ -n $1 ] do echo "Parameter$count is $1" count=$[ $count + 1 ] shift done 二、命令行选项和参数

命令行的选项是指,在执行命令时同时提供的单破折号后面的单字母,能改变命令的行为。 getopts 命令内建于bash shell。getopts 命令的格式如下:

getopts optstring variable

有效的字母都会列在 optstring 中,如果选项字母要求有参数值,就在字母后加 “:” 。如果命令行提供了 optstring 中没有的参数,将会输出错误信息,可以在 optstring 前添加 “:” 来去掉错误信息。 getopts 会将当前参数保存在 variable 中。getopts 命令会用到两个环境变量。如果选项需要跟一个参数值,参数值将保存在OPTARG环境变量。OPTIND环境变量保存了参数列表中 getopts 正在处理的参数位置,这样可以在处理完选项之后继续处理其它命令行参数。

zzz@ubuntu:~/my_learning$ cat test.sh #!/bin/bash echo while getopts :ab:c opt do case "$opt" in a) echo "deal -a option";; b) echo "deal -b option, with value $OPTARG";; c) echo "deal -c option";; *) echo "Unknow option";; esac done zzz@ubuntu:~/my_learning$ ./test.sh -ab b_value -c deal -a option deal -b option, with value b_value deal -c option zzz@ubuntu:~/my_learning$ 三、获得用户输入

基本的读取用户输入 read 命令从标准输入或另一个文件描述符中接受输入。在收到输入后,read命令会将数据放进一个变量。

read -p 提示信息 read -t 指定一个计时器,指定等待输入的秒数,到期后,返回一个非零退出状态码 read -s 在显示器上不显示输入 zzz@ubuntu:~/my_learning$ cat test1.sh #!/bin/bash read -p "输入一个字符串: " str echo "str is $str" zzz@ubuntu:~/my_learning$ ./test1.sh 输入一个字符串: zz str is zz zzz@ubuntu:~/my_learning$

可以为 read 指定多个变量。

zzz@ubuntu:~/my_learning$ cat test1.sh #!/bin/bash read -p "输入一个名字: " first last echo "Name is $first$last" zzz@ubuntu:~/my_learning$ ./test1.sh 输入一个名字: z zz Name is zzz zzz@ubuntu:~/my_learning$

如果在 read 命令行中不指定变量。read 命令将会把接受到的所有数据都放进特殊环境变量 REPLY 中。

zzz@ubuntu:~/my_learning$ cat test1.sh #!/bin/bash read -p "输入一个名字: " echo "Name is $REPLY" zzz@ubuntu:~/my_learning$ ./test1.sh 输入一个名字: z zz Name is z zz zzz@ubuntu:~/my_learning$ 四、从文件中读取

read 命令也可以读取 Linux 文件中保存的数据。每次调用 read 命令,都会从文件中读取一行文本,当文件中没有内容时,read 退出并返回非零退出状态码。

zzz@ubuntu:~/my_learning$ cat files This is Line1. This is Line2. This is Line3. This is Line4. zzz@ubuntu:~/my_learning$ cat test2.sh #!/bin/bash cat files | while read line do echo "Read: '$line'" done echo "Read Finished." zzz@ubuntu:~/my_learning$ ./test2.sh Read: 'This is Line1.' Read: 'This is Line2.' Read: 'This is Line3.' Read: 'This is Line4.' Read Finished. zzz@ubuntu:~/my_learning$


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有