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 shellgetopts 命令的格式如下

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$ 

原文地址:https://blog.csdn.net/weixin_43276033/article/details/124723106

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41742.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注