博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell - 简明Shell入门13 - 用户输入(UserInput)
阅读量:6985 次
发布时间:2019-06-27

本文共 4665 字,大约阅读时间需要 15 分钟。

示例脚本及注释

1 - arguments

#!/bin/bashif [ -n "$1" ];then # 验证参数是否传入  echo "The first parameter is ${1}."else  echo "No arguments!"fiecho '$0 当前shell脚本的名称:' $0echo '$0 当前shell脚本的PID:' $$echo '$* 当前shell脚本的所有参数:' $*echo '$@ 当前shell脚本的所有参数:' $@echo '$# 当前shell脚本的参数个数:' $#for param in "$*" # 遍历$*do  echo "\$* Parameters : $param"donefor 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!"fifunction 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=1while [ -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/shecho -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# donewhile read CMD; do    echo "$CMD"done < test.logrm -rf test.logexit 0#   ### 在脚本运行时,通过read命令以交互的方式获取输入#   - 在脚本中使用“read variable”获取标准输入,并将数据存放到标准变量中;使用“$varialbe”调用输入;#   - read命令可以指定多个变量来获取多个输入;如果输入的值多于变量,多出的值会统一分配给最后一个变量;#   - 如果不指定变量,read命令会将所有接收到的数据都放到特殊环境变量REPLY中;#   #   #   ### read命令常用选项#   -p : 省略echo命令并指定变量名字,可以多个变量;#   -t 
: 设置超时时间为n秒;# -n
: 当输入的字符数目达到预定数目n时,自动退出,并将输入的数据赋值给变量;# -s : 隐藏输入(不显示输入的数据),但实际上只是将输入字符的颜色设置与背景色相同;# # # ### read命令从文件中读取内容# - 利用管道和while循环,可以实现逐行读取文件内容;# - 如果文件为空(没有数据),read命令会退出并返回非零退出状态码;

4 - getopts

#!/bin/bashfunction 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"}if [ -z "$1" ]then echo "No arguments!" show_help exit 1fistr="$1"if [ "${str:0:1}" != "-" ] || [ -z "${str:1:2}" ]; then echo "Invalid option!" exit 1fiwhile 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;; esacdone# ### getopt和getopts# - getopt和getopts命令可用于解析所有命令行参数,能够使Shell脚本实现选项列表的功能;# - getopt是外部命令,可以支持长选项和可选参数;# - getopts是shell内置命令,能够处理选项和参数之间的空格;自动去除选项前的破折号;但无法处理非-开头的选项;# # # ### getopts命令# - 使用形式:“getopts
”# - 如果选项字符串optstring以冒号开始,表明禁止输出错误消息;如果其中的选项以冒号结尾,表明此选 项需要参数值;# - 当前参数放在variable中;# - 选项必须在其参数之前,而且必须用空格分开;# - 如果需要参数的选项没有指定参数,将向标准错误中写入错误消息;# # # ### getopts命令的变量# - $OPTARG变量保存选项的参数值;# - $OPTIND变量保存原始$*中下一个要处理的选项位置;# - $OPTIND初值为1,遇到不带参数的选项将“optind += 1”,遇到带参数的选项将“optind += 2”

转载于:https://www.cnblogs.com/anliven/p/7360839.html

你可能感兴趣的文章
CentOS ping: unknown host 解决方法
查看>>
设计模式之责任链模式
查看>>
在 Windows 下安装 Oracle 11g XE (Express Edition)
查看>>
php多态设计
查看>>
oracel SQL多表查询优化
查看>>
Spring-Context的注解实现依赖注入功能
查看>>
CSS格式化 CSS代码压缩工具
查看>>
Android的TextView使用Html来处理图片显示、字体样式、超链接等
查看>>
mvc伪静态<三> IIS配置
查看>>
.NET设计模式(12):外观模式(Façade Pattern)(转)
查看>>
【leetcode】Maximum Gap(hard)★
查看>>
Visual Studio中的lib的链接顺序
查看>>
Cacti安装详细步骤
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
eclipse调试java程序的九个技巧
查看>>
用JS获取地址栏参数的方法
查看>>
巴特沃斯(Butterworth)滤波器 (2) - 双线性变换
查看>>
iOS 小知识点(持续更新)
查看>>
iOS人脸识别(CoreImage)
查看>>