Linux Shell用户输入--整理

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

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

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

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

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

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

  $#,$*,[email protected]在为参数中有着特殊的含义:

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

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

  [email protected]将所有变量保存为单个单词。

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

 通过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 "[email protected]"` :表示对应的b选项后面需要带参数

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

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

  对应的事列如下:

set -- `getopt -q ab:c "[email protected]"`

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 "[email protected]"

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 "[email protected]"

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命令每次会从文件中读取一行文本。

时间: 2024-09-29 01:07:34

Linux Shell用户输入--整理的相关文章

linux bash 用户输入yes or no.

脚本为script2 vim 打开脚本 内容是 对用户的键盘输入反应 sh 运行脚本,一次输入的是y ,一次输入的是n. 原文地址:https://www.cnblogs.com/zijidefengge/p/12241579.html

linux shell自动输入实现

1 #!/bin/sh 2  3 while read line 4 do 5         str=$line 6         var1=`echo $str|awk -F ' ' '{print $1}'` 7         var2=`echo $str|awk -F ' ' '{print $2}'` 8         var3=`echo $str|awk -F ' ' '{print $3}'` 9         echo $var1 $var2 $var310     

shell整理(29)===判断用户输入可不可以作为变量

(一)题目: 接受一个用户输入,判断这个输入是否可以作为变量 可以作为变量的条件 (1)大小写字母都可以 (2)字母中间可以有数字,但是不能以数字开头 (3)特殊字符除了"_ "其他都不可以作为变量 例如: [[email protected] hushuai]# bash 22.sh Input:1dsf Name is not [[email protected] hushuai]# bash 22.sh Input:=ewr Name is not [[email protect

【shell】Linux shell 之 判断用户输入的变量是否为数字

本文内容:判断用户输入的参数是否为数字 在shell中如何进行计算? 方式一 [[email protected] scripts]# echo $((1+2)) 3 方式二 [[email protected] scripts]# expr 2 + 3 5 [[email protected] scripts]# 注意:使用方式二的时候,要求必须要有间隔.如果使用的是乘法,号必须进行转义写为 \ [[email protected] scripts]# expr 2 * 3 expr: 语法错

Linux系列-shell学习笔记(续一) 处理用户输入

1.运行带参数的程序 $0表示程序名,$1表示第一个参数,$2表示第二个参数,一次类推,直到第九个参数$9 # vi factorial #!/bin/sh f=1 for((i=1;i<=$1;i++)) do f=$[ $f * $i] done echo $f 测试: [[email protected] test]# ./factorial 5 120 注意:如果有多个参数,每个参数必须有个空格,如果一个参数里面带空格,必须用单引号或双引号括起来. 2.读取程序名 编写基于所用的脚本名而

linux shell数据重定向(输入重定向与输出重定向)详细分析(转载)

本文为转载 原文链接 http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值. linux启动后,会

shell基础05 处理用户输入

1.  命令行参数------类似javac  参数1 参数2 类似Java中编译的javac parm1.....在shell中,参数与参数之间用空格隔开.采用位置参数来识别对应的参数值:$0是程序名,$1是第一个参数,以此类推,知道第9个参数$9.对于大于9个参数的需要在变量数字周围添加花括号,比如${10}. note:命令行上不仅可以处理数值,还可以处理字符串. 1 [[email protected] Documents]$ cat test2.sh 2 #!/bin/bash 3 t

Shell编程—处理用户输入

1命令行参数 1.1读取参数 bash shell会将一些称为位置参数(positional parameter)的特殊变量分配给输入到命令行中的所有参数.这也包括shell所执行的脚本名称.位置参数变量是标准的数字:$0是程序名,$1是第一个参数,$2是第二个参数,依次类推,直到第九个参数$9. 例子:计算阶乘 $ vim test1.sh #!/bin/bash # using one command line parameter factorial=1 for (( number = 1;

shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;

[[email protected] wyb]# cat tishiuser.sh #!/bin/bash #提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息:否则, #则显示无此用户:显示完成之后,提示用户再次输入:如果是quit则退出; echo 'Input `quit` to quit' while : do read -p "Please Input a user:" choice [ -z $choice ] &&continue [[ &q