Shell - 简明Shell编程13 - 用户输入(UserInput)
2017-08-14 23:10
585 查看
示例脚本及注释
1 - arguments
#!/bin/bash if [ -n "$1" ];then # 验证参数是否传入 echo "The first parameter is ${1}." else echo "No arguments!" fi echo '$0 当前shell脚本的名称:' $0 echo '$0 当前shell脚本的PID:' $$ echo '$* 当前shell脚本的所有参数:' $* echo '$@ 当前shell脚本的所有参数:' $@ echo '$# 当前shell脚本的参数个数:' $# for param in "$*" # 遍历$* do echo "\$* Parameters : $param" done for param in "$@" # 遍历$@ do echo "\$@ Parameters : $param" done ### 依次读取当前shell脚本的所有输入参数 while [ -n "$1" ] do echo "参数为:$1, 参数个数为:$#" shift # shift命令将参数变量左移一个位置 done # ### 执行脚本时,通过对应的位置参数和特殊变量来完成输入; # $0 当前shell脚本的名称 # $n 当前shell脚本的第n个参数,$1是第一个参数,$2是第二个参数,${10}是第十个参数 # $* 当前shell脚本的所有参数(不包括脚本本身),将所有参数当作一个字符串整体 # $@ 当前shell脚本的所有参数(不包括脚本本身),循环遍历所有参数 # $# 当前shell脚本的参数个数(不包括脚本本身) # $$ 当前shell脚本的PID # $? 最后一个指令的返回值(退出状态);0表示没有错误,非0表示有错误 # # # ### 移动参数变量 # - shift命令将移动命令行参数变量左移一个位置,$2变量的值将会移动到$1,而$1变量的值将会被删除,且不能恢复;但是$0变量的值不变; # - “shift n”表示移动n个位置;
2 - shift
#!/bin/bash if [ -z "$1" ] # -z 字符串的长度为零 then echo "No arguments!" fi function show_help(){ echo "Usage:" echo " ./$0 -a Option A" echo " ./$0 -b Option B" echo " ./$0 -c Option C" echo " ./$0 -h Show help information" } count=1 while [ -n "$1" ] # 判断参数是否存在;–n 字符串的长度非零 do echo "第 $count 个命令行参数 : $1" count=$[ $count+1 ] case $1 in -a) echo "Perform action A" ;; -b) echo "Perform action B" ;; -c) echo "Perform action C" ;; -h) show_help ;; *) echo "$1 is not an option!" break ;; esac shift # 命令行参数值左移一位 # shift 2 # 使用"shift n"对命令行参数左移n位 done # ### 简单的命令行选项(只有选项,没有参数) # - 适合使用shift命令和case语句处理 # # # ### shift命令 # - shift命令能够改变命令行参数的相对位置; # - 默认将每个参数变量左移一个位置;变量$3的值移给变量$2,变量$2的值移位给变量$1,而变量$1的值被丢弃;变量$0的值和程序名称都保持不变; # - 特别注意:将某一位参数移位掉后,该参数值永久丢失,不可恢复; # - “shift n”表示移动n个位置; # # # ### case语句 # - 本例中,case语句会匹配和执行所有的有效选项; # - 如果只想匹配和执行第一个有效选项,不使用while循环和shift命令即可; # - case语句的catch-all部分可以处理其他参数;
3 - read
#!/bin/sh echo -n "Enter your name:" # “echo -n”移掉字符串末尾的换行符,允许紧跟其后输入数据 read -t 5 name # 设置超时时间为3秒 echo "Hi, $name !" read -p "Enter your age:" age # -p选项,在read命令中指定提示 days=$[ $age * 365 ] echo "$days days !" read -s -p "What do you want :" w1 w2 # 指定多个变量来获取多个输入 echo "You want to get more $w1 and $w2 !" read -n1 -p "Do you want to continue [Y/N]?" answer # -n1选项,接受到一个字符就退出 case $answer in Y | y) echo -e "\n Continue!";; N | n) echo -e "\n Goodbye!";; *) echo -e "\n Error Choice!";; esac ### 示例:read命令从文件中读取内容的方法 echo -e "aaa\n222\nccc" > test.log # 创建示例文件 cat test.log # count=1 # cat test.log | while read line # do # echo "Line $count : $line" # count=$[ $count + 1 ] # done # cat test.log | \ # while read CMD; do # echo $CMD # done while read CMD; do echo "$CMD" done < test.log rm -rf test.log exit 0 # ### 在脚本运行时,通过read命令以交互的方式获取输入 # - 在脚本中使用“read variable”获取标准输入,并将数据存放到标准变量中;使用“$varialbe”调用输入; # - read命令可以指定多个变量来获取多个输入;如果输入的值多于变量,多出的值会统一分配给最后一个变量; # - 如果不指定变量,read命令会将所有接收到的数据都放到特殊环境变量REPLY中; # # # ### read命令常用选项 # -p : 省略echo命令并指定变量名字,可以多个变量; # -t <n> : 设置超时时间为n秒; # -n<n> : 当输入的字符数目达到预定数目n时,自动退出,并将输入的数据赋值给变量; # -s : 隐藏输入(不显示输入的数据),但实际上只是将输入字符的颜色设置与背景色相同; # # # ### read命令从文件中读取内容 # - 利用管道和while循环,可以实现逐行读取文件内容; # - 如果文件为空(没有数据),read命令会退出并返回非零退出状态码;
4 - getopts
#!/bin/bash function show_help(){ echo "Usage:" echo " ./$0 -a option A" echo " ./$0 -b <paramter> option B" echo " ./$0 -c <paramter> option C" echo " ./$0 -h Show help information" } if [ -z "$1" ] then echo "No arguments!" show_help exit 1 fi str="$1" if [ "${str:0:1}" != "-" ] || [ -z "${str:1:2}" ]; then echo "Invalid option!" exit 1 fi while getopts "ab:c:h" opt; do case "$opt" in a) echo "Perform an action A" echo "Next option index : $OPTIND";; b) echo "Perform an action B with parameter value $OPTARG" echo "Next option index : $OPTIND";; c) echo "Perform an action C with parameter value $OPTARG" echo "Next option index : $OPTIND";; h) show_help;; \?) echo "Invalid option or parameter!" show_help exit 1;; esac done # ### getopt和getopts # - getopt和getopts命令可用于解析所有命令行参数,能够使Shell脚本实现选项列表的功能; # - getopt是外部命令,可以支持长选项和可选参数; # - getopts是shell内置命令,能够处理选项和参数之间的空格;自动去除选项前的破折号;但无法处理非-开头的选项; # # # ### getopts命令 # - 使用形式:“getopts <optstring> <variable>” # - 如果选项字符串optstring以冒号开始,表明禁止输出错误消息;如果其中的选项以冒号结尾,表明此选 项需要参数值; # - 当前参数放在variable中; # - 选项必须在其参数之前,而且必须用空格分开; # - 如果需要参数的选项没有指定参数,将向标准错误中写入错误消息; # # # ### getopts命令的变量 # - $OPTARG变量保存选项的参数值; # - $OPTIND变量保存原始$*中下一个要处理的选项位置; # - $OPTIND初值为1,遇到不带参数的选项将“optind += 1”,遇到带参数的选项将“optind += 2”
相关文章推荐
- Android Developers--Best Practices for User Input(第九章) 对用户输入的最佳实践
- 对用户输入的数据进行安全验证(Safe-Handling User Input)
- shell编程中用户输入处理(shell 04)
- Shell编程中的用户输入处理(3):在shell脚本中,处理命令行参数
- Shell编程中的用户输入处理(4):在shell脚本中,使用read命令获取命令行输入
- Linux命令行与shell编程笔记-13处理用户输入
- shell中处理用户输入
- shell脚本编程-处理用户输入
- javascript验证html5自带input type="date"用户输入日期过期的方法
- python 模拟鼠标键盘输入PyUserInput
- Shell while read命令完成用户的交互输入
- python -input用户输入
- shell 读取用户输入
- shell 限制用户输入条件
- shell 要求用户输入一个用户名,查询系统中是否存在该用户,若有打印用户存在,若不存在添加该用户
- 解决adb shell input text 中文输入,unicode转utf-8
- shell脚本-批量建立用户user_01,user_02...user_100
- input type=file 禁止让用户手动输入
- SHELL脚本的基础知识4——处理用户输入
- until 循环:实现一个shell脚本,不停地询问用户要执行什么操作,直到用户输入quit才会退出