美文网首页
九、处理用户输入

九、处理用户输入

作者: Miridescent | 来源:发表于2018-06-01 11:29 被阅读17次

简单目录

  • 1.命令行参数
  • 2.处理命令行选项和命令行参数参数
  • 3.read命令获取用户输入

1.命令行参数

在命令行直接执行脚本都会,同样的,在执行脚本的同时可以带参数

读取参数

看下面的脚本例子

#!/bin/bash
  
echo $0
echo $1
echo $2

运行结果

➜  ./test 1 2
./test
1
2

bash shell会用一些特殊变量接收这些参数,$0脚本名、1第一个参数以此类推,一直到$9
*注意 $0是脚本的名字和路径
*注意 参数是以空格区分的,如果字符串中间有空格的话,可以用引号将字符串包裹起来(单双引号均可),如下

➜ ./test 1 "hello world"
./test
1
hello world

*注意 如果传递参数超过9个,超过的部分用花括号包裹起来即可,如下

${10}

*注意 如果想去掉$0中的路径,可以用basename命令,如下

$(basename $0)

*注意 如果脚本中用了变量,但是实际没有传参数,运行脚本时会报错
为了解决参数未传的问题,可以使用-n命令在脚本中对变量进行检测,如下

if [-n "$1"]
then
  .......

特殊参数变量

bash shell中提供了一些特殊的变量,帮助处理参数
$#命令行参数个数
$*将所有参数转换成一个词
$@将所有参数转换成一个字符串,将每一个参数当做一个词
shift命令获奖没测参数变量向左移动一个位置,即$3的值会移动到$2中,这样会方便我们便利参数
*注意 移动后,左面的值将被删除,不可找回
*注意 shift命令后可以接一个参数,表示移动多少位

2.处理命令行选项和命令行参数

命令行中不光可以传参数,还可以传命令行选项
通常的shell脚本会用--将选项和参数分割,这样,在脚本内部可以根据--区分

getopt命令格式化命令行参数,格式如下
getopt optstring parameters

optstring定义了那些字母是命令行选项,并且那些带参数(字母后跟冒号标识选项有参数)
parameters是参数
举例如下:

➜ getopt ab:cd -a -b test1 -cd test2 test3
 -a -b test1 -c -d -- test2 test3

格式化之后的参数通过--将选项与参数分开,并在适当的选项后加了参数
*注意 命令行中出现未定义的选项,getopt命令会报错,如果不想报错,可以加-q参数

getopts命令

getoptsgetopt的基础上增加了两个环境变量
OPTARG: 如果一个选项要跟一个参数,则OPTARG会保存这个值
例子

#!/bin/bash
echo 
while getopts :ab:c opt
do
                case "$opt" in
                        a) echo "选项a";;
                        b) echo "选项b, b选项带的参数$OPTARG";;
                        c) echo "选项c";;
                        *) echo "结束"
                esac
done

执行结果

➜  ./test -ab test1 -c
选项a
选项b, b选项带的参数test1
选项c

*注意 上面脚本中用到的optOPTARG变量

OPTIND:getopts每处理一个参数,OPTIND会增一,这样就可以知道参数的位置
例子:

#!/bin/bash
  
echo 
while getopts :ab:c opt
do
                case "$opt" in
                        a) echo "选项a";;
                        b) echo "选项b, b选项带的参数$OPTARG";;
                        c) echo "选项c";;
                        *) echo "结束"
                esac
done

shift $[$OPTIND - 1]

echo "下面的是参数"

count=1
for param in "$@"
do
        echo "参数$count: $param"
        count=$[$count-1]
done

运行结果

➜  ./test -ab test1 -c test2 test3

选项a
选项b, b选项带的参数test1
选项c
下面的是参数
参数1: test2
参数0: test3

*注意 linux中有一些约定俗成的选项标准,所以在写脚本的时候最好遵循这些标准

3.read命令获取用户输入

read命令从标准输入接收

例子:

#!/bin/bash
  
echo -n "请输入你的名字:"
read name
echo "你好: $name"

执行结果:

➜   ./read
请输入你的名字:haha
你好: haha

-n选项不会在字符串末尾加上换行
-p选项可以直接在read命令后指定变量,上面的脚本可简写为

#!/bin/bash
  
read -p "请输入你的名字:" name
echo "你好: $name"

*注意 -p命令可以指定多个变量,输入时用空格区分
*注意 如果输入大于指定变量个数,则会依次分配,直到最后一个变量接收所有剩下的参数
*注意 如果-p命令没有指定变量,则默认输入会存储在REPLY变量中

-t选项可以指定一个定时器,指定read命令等待输入的秒数,如下

read -t 5 -p "请输入:" 

*注意 如果超出时间,则read命令会以非0状态码结束

-s选项可以隐藏输入,常见的有在命令行输入密码的时候

read命令从文件接收输入

read命令读取文件时,每执行一次read命令会读取文件中的一行文本,如果没有内容,则read命令会以非0状态码退出
例子:

#!/bin/bash
cat file | while read line
do
        echo "$line"
done

相关文章

  • 九、处理用户输入

    简单目录 1.命令行参数 2.处理命令行选项和命令行参数参数 3.read命令获取用户输入 1.命令行参数 在命令...

  • 处理用户输入

    命令行参数 命令行参数在运行脚本时添加数据 1是第一个参数......每个参数都是用空格分隔,在使用参数前一定要进...

  • 【基础】处理用户输入

    处理用户输入 html js

  • shell中处理用户输入

    1、使用命令行参数在shell执行的时候命令行中输入的所有参数可以赋值给一些特殊变量,这些变量成为位置变量参数。包...

  • PHP 对用户输入处理

    今天在看php5权威编程看到一个关于用户输入的函数处理,觉得思路挺好,整理好后,记录下来。方便以后查看

  • 一些Android原生控件

    1、SearchView SearchView这个控件,主要用来处理用户的输入,并对用户的输入做出响应。 先看下各...

  • 表单的基本属性

    HTML表单搜集不同类型的用户输入,将用户输入和动作请求传给服务器,服务器根据不同数据和请求进行不同处理,保存处理...

  • Start Developing iOS Apps (Swift

    处理用户输入 现在,用户可以重置菜品名称label的默认值,但是你真正想要的是让用户使用text filed来输入...

  • Java异常的四个问题

    错误处理对于许多常见操作都很重要—从处理用户输入到发出网络请求。应用程序不应该仅仅因为用户输入无效数据或web服务...

  • NSString处理技巧

    使用场景举例:可以用在处理用户用户输入在UITextField的文本 //待处理的字符串 NSString *st...

网友评论

      本文标题:九、处理用户输入

      本文链接:https://www.haomeiwen.com/subject/lstxsftx.html