您的位置:首页 > 教程 > linux > 浅谈Shell脚本参数与交互及常见问题

浅谈Shell脚本参数与交互及常见问题

2022-06-19 20:48:44 来源:易采站长站 作者:

浅谈Shell脚本参数与交互及常见问题

目录一、Shell编程-脚本参数与交互及常见问题1.1向脚本传递参数1.2用户交互1.3特殊变量1.4Shell编程常见问题1.4.1如何屏蔽命令的输出结果1.4.2如何把一条命令分成多行...QLv站长之家-易采站长站-Easck.Com

目录
一、Shell编程-脚本参数与交互及常见问题QLv站长之家-易采站长站-Easck.Com

1.1 向脚本传递参数QLv站长之家-易采站长站-Easck.Com

1.2 用户交互QLv站长之家-易采站长站-Easck.Com

1.3 特殊变量QLv站长之家-易采站长站-Easck.Com

1.4 Shell编程常见问题QLv站长之家-易采站长站-Easck.Com

1.4.1 如何屏蔽命令的输出结果QLv站长之家-易采站长站-Easck.Com

1.4.2 如何把一条命令分成多行编写QLv站长之家-易采站长站-Easck.Com

QLv站长之家-易采站长站-Easck.Com

一、Shell编程-脚本参数与交互及常见问题QLv站长之家-易采站长站-Easck.Com

在执行一个脚本程序时,会经常需要向脚本传递一些参数,并根据输入的参数值生成相应pXDPPljuW的数据或执行特定的逻辑。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

QLv站长之家-易采站长站-Easck.Com

1.1 向脚本传递参数QLv站长之家-易采站长站-Easck.Com

执行Shell脚本时可以带有参数,在Shell脚本中有变量与之对应进行引用。这类变量的名称很特别,分别是0、1、2、3...被称为位置变量。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

位置变量是由 0 开始,其中 0 变量预留用来保存实际脚本的名字,1 变量对应脚本程序的第 1个参数,依次类推。与其他变量一样,可以在Shell 中通过“$”符号来引用位置变量的值。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

[root@localhost 20190105]# vi paral.sh
#!/bin/bash
#显示脚本名
echo 'The script name is '$0
#显示第1个参数
echo 'The 1th parameter is '$1
#显示第2个参数
echo 'The 2th parameter is '$2
#显示第3个参数
echo 'The 3th parameter is '$3
#显示第4个参数
echo 'The 4th parameter is '$4
#显示第5个参数
echo 'The 5th parameter is '$5
#显示第6个参数
echo 'Thhttp://www.cppcns.come 6th parameter is '$6
#显示第7个参数
echo 'The 7th parameter is '$7
#显示第8个参数
echo 'The 8th parameter is '$8
#显示第9个参数
echo 'The 9th parameter is '$9
[root@localhost 20190105]# ./paral.sh Ni hao , Nice to meet you !
The script name is ./paral.sh
The 1th parameter is Ni
The 2th parameter is hao
The 3th parameter is ,
The 4th parameter is Nice
The 5th parameter is to
The 6th parameter is meet
The 7th parameter is you
The 8th parameter is !
The 9th parameter is      //空值
[root@localhost 20190105]#

QLv站长之家-易采站长站-Easck.Com

1.2 用户交互QLv站长之家-易采站长站-Easck.Com

使用 read 命令可以从键盘上读取数据,然后赋给指定的变量,在Shell脚本中实现与用户的数据交互。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

read命令的格式QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

read 变量1 [变量2...]

read命令可以从键盘上读取到多个变量的值,用户输入数据时,数据间以空格或者 Tab键作为分隔。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

如果变量个数与输入的数据个数相同,则依次对应赋值;QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

如果变量个数大于输入的数据个数,则从左到右对应赋值;如果没有数据,则以之对应的变量为空;QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

如果变量个数少于输入的数据个数,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

通过 read 命令读取键盘上输入的数据保存到变量中,同时把变量值显示在屏幕上,当用户输入 exit 时结束程序。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

[root@localhost 20190105]# vi read1.sh
#!/bin/bash
#初始化变量的值
input1=''                                               #设置 input1 变量值为空
input2=''                                               #设置 input2 变量值为空
input3=''                                               #设置 input3 变量值为空
input4=''                                               #设置 input4 变量值为空
#until 循环,当 input1 变量的值为 exit 时退出该循环
until [ "$input1" = exit ]
do
       echo 'Please input the values:'
#读取键盘输入的数据
       read input1 input2 input3 input4
#输入的不是 exit 时把用户输入的数据显示在屏幕上
       if [ "$input1" != exit ]
       then
               echo 'input1: '$input1                  #输出变量 input1 的值
               echo 'input2: '$input2                  #输出变量 input2 的值
               echo 'input3: '$input3                  #输出变量 input3 的值
               echo 'input4: '$input4                  #输出变量 input4 的值
               echo
#当输入为 exit 时显示退出脚本的提示
       else
               echo 'Exit the script.'
       fi
done
[root@localhost 20190105]# chmod +x read1.sh
[root@localhost 20190105]# ./read1.sh
Please input the values:
How do you do           //输入的数据个数与变量个数相等
input1: How
input2: do
input3: you
input4: do

Please input the values:
Welcome to beijing       //输入的数据个数小于变量个数
input1: Welcome
input2: to
input3: beijing
input4:

Please input the values:
let's go              //输入的数据个数小于变量个数
input1: let's
input2: go
input3:
input4:

Please input the values:
Nice to meet you,too!      //输入的数据个数大于变量个数
input1: Nice
input2: to
input3: meet
input4: you,too!

Please input the values:    //结束程序
exit
Exit the script.
[root@localhost 20190105]#

运行结果可以看出:QLv站长之家-易采站长站-Easck.Com

当变量个数大于输入的数据个数时,没有数据与之对应的变量的值为空;
当变量个数小于输入的数据个数时,最后一个变量会被赋予剩余的所有数据;

QLv站长之家-易采站长站-Easck.Com

1.3 特殊变量QLv站长之家-易采站长站-Easck.Com

特殊变量及说明QLv站长之家-易采站长站-Easck.Com

浅谈Shell脚本参数与交互及常见问题 QLv站长之家-易采站长站-Easck.Com

[root@localhost 20190105]# vi vall.sh
#!/bin/bash
echo 'The value of $# is: '$#           //输出$#变量的值
echo 'The value of $* is: '$*           //输出$*变量的值
echo 'The value of $@ is: '$@           //输出$@变量的值
echo 'The value of $$ is: '$$           //输出$$变量的值
echo 'The value of $! is: '$!           //输出$!变量的值
echo 'The value of $- is: '$-           //输出$-变量的值
echo 'The value of $? is: '$?           //输出$?变量的值
[root@localhost 20190105]# ./vall.sh how do you do
The value of $# is: 4 //输出4变量的值
The value of $* is: how do you do //输出how do you do变量的值
The value of $@ is: how do you do //输出how do you do变量的值
The value of $$ is: 9040 //输出9040变量的值
The value of $! is:  //输出变量的值
The value of $- is: hB //输出hB变量的值
The value of $? is: 0 //输出0变量的值
[root@localhost 20190105]#

QLv站长之家-易采站长站-Easck.Com

1.4 Shell编程常见问题QLv站长之家-易采站长站-Easck.Com

QLv站长之家-易采站长站-Easck.Com

1.4.1 如何屏蔽命令的输出结果QLv站长之家-易采站长站-Easck.Com

linux 默认会创建一个设备文件/dev/null(空设备),所有输出到该设备的信息都会被屏蔽。通过把命令的输出重定向到设备/dev/null,可以屏蔽命令的输出结果。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

命令 > /dev/null

屏蔽命令的错误输出QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

命令 2> /dev/null

屏蔽命令的正常以及错误输出QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

命令 > /dev/null 2> /dev/null

例如:要在 Shell 代码中使用 grep 命令查找文件是否存在某个关键字,但是又希望屏幕 grep 命令的输出。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

if grep jack /etc/passwd > /dev/null
then
 echo "jack found"
fi

如果 /etc/passwd 文件中有 jack 关键字的信息,将会显示 jack found,但不会输出 grep 命令的执行结果。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

QLv站长之家-易采站长站-Easck.Com

1.4.2 如何把一条命令分成多行编写QLv站长之家-易采站长站-Easck.Com

Linux 的 Shell 脚本功能非常强大,它允许用户通过管道方式把多个命令组合在一起,但因此往往也导致在一行 Shell 脚本代码中编写的命令过长,难以阅读,为了使脚本的结构更加清晰,可以把一行 Shell 脚本代码分成多行进行编写。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

使用两个管道符把ps、grep 和 awk 命令组合。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

[root@localhost ~]# ps -ef | grep sshd | awk '{print $2}'
4478
12821
22028

在一行代码中把多个命令组合在一起,难以阅读。Shell 提供了一个特殊字符“\”,可以把一行代码分成多行进行编写。QLv站长之家-易采站长站-Easck.Com
QLv站长之家-易采站长站-Easck.Com

[root@localhost ~]# ps -ef | \
> grep ssh | \
> awk '{print $2}'
4478
12821
23375
[root@localhost ~]#

到此这篇关于浅谈Shell脚本参数与交互及常见问题的文章就介绍到这了,更多相关Shell脚本参数与交互内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们! QLv站长之家-易采站长站-Easck.Com

QLv站长之家-易采站长站-Easck.Com

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25