Linux shell 脚本处理用户输入(命令行选项参数、用户输入)

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 shell。getopts 命令的格式如下:

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$ 

  • 16
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux中打开shell脚本,您可以使用命令行界面(CLI)或图形用户界面(GUI)。 在CLI中,您可以使用终端应用程序(如Terminal或Konsole)打开shell脚本。首先,打开终端应用程序,然后使用cd命令导航到包含shell脚本的目录。接下来,输入./脚本名称.sh命令来运行脚本。 在GUI中,您可以使用文件管理器(如Nautilus或Dolphin)打开shell脚本。首先,打开文件管理器,然后导航到包含shell脚本的目录。接下来,右键单击脚本文件并选择“打开”或“运行”选项来运行脚本。您还可以使用文本编辑器(如gedit或kate)打开脚本文件进行编辑。 ### 回答2: 要在Linux上打开一个shell脚本,您需要打开终端并输入以下命令: 1. 打开终端 首先,您需要打开终端。您可以在Linux系统的桌面或任务栏中找到终端应用程序,然后打开它。 2. 浏览到脚本所在的目录 接下来,您可以使用cd命令导航到脚本所在的目录。例如,如果脚本位于您的“文档”文件夹中,则可以使用以下命令: cd ~/Documents 3. 赋予脚本可执行权限 在Linux中,您需要先为脚本赋予可执行权限,然后才能运行它。要为脚本添加可执行权限,请使用以下命令: chmod +x script.sh 其中script.sh是您要运行的脚本的名称。 4. 运行脚本 现在,您可以使用以下命令在终端中运行该脚本: ./script.sh 请注意,在命令前面加上./是必需的,因为您要运行当前目录中的脚本。 5. 退出脚本 要退出正在运行的脚本,请按Ctrl + C。 总结: 在Linux上打开shell脚本需要打开终端,进入脚本所在的目录,为脚本添加可执行权限,然后使用./script.sh运行脚本。 ### 回答3: Linux是一个基于Unix操作系统的自由和开放源代码的操作系统,是一个强大的服务器操作系统,支持多用户、多进程、多任务的操作。Linux有很多优点,例如性能稳定、开源、安全性高等。而shell脚本是在Linux的终端模式下执行的一种文件,可以批量自动化执行命令。那么如何打开shell脚本呢? 1.首先确认所在路径:在Linux终端界面输入“pwd”,可以查看当前的工作目录,确定脚本所在的路径。 2.在Linux的终端界面输入命令“cd 文件路径”,进入脚本所在的目录。 3.确认脚本文件是否存在,可以用ls命令查看当前目录下的文件。 4.如果脚本文件的扩展名为.sh,则可以直接执行。在终端界面输入命令“chmod +x 文件名.sh”,赋予执行权限后,再输入命令“./文件名.sh”即可运行。 5.如果脚本文件的扩展名不为.sh,需要手动指定运行程序。在终端界面输入命令“sh 文件名”,即可执行。 6.运行脚本后,可以在终端界面实时查看脚本的输出,以及执行结果。 综上所述,通过进入脚本所在的目录,确认其存在,并赋予执行权限,即可运行shell脚本。在实际应用中,shell脚本Linux管理员日常工作中十分常用的工具,能够帮助管理员快速自动化执行任务,提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值