文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Bash 初学者系列 3:给 bash 脚本传递参数

2024-12-01 02:20

关注

我们在上一篇文章中介绍了如何在 bash 脚本中使用变量​,可以响应各种数据以及接收用户输入。

今天我们将介绍如何通过命令行将变量以参数的形式传递给 bash 脚本。

向 bash 传递参数

下面脚本 count_lines.sh 将输出用户指定的文件的总行数:

#!/bin/bash
echo -n "Please enter a filename: "readnlines=$(wc -l < $filename)
echo "There are $nlines lines in $filename"

例如,用户可以输入文件 /etc/passwd,脚本将输出行数:

脚本运行良好;然而,还有进一步优化的空间。

我们可以让用户在运行脚本时简单地将文件名作为命令行参数传递,而不是提示用户输入文件名,如下所示:

./count_lines.sh /etc/passwd

第一个 bash 参数(也称为位置参数)可以在 bash 脚本中使用 $1 访问。所以在 count_lines.sh 中,可以按如下方式将文件名变量替换为 $1:​

#!/bin/bash
nlines=$(wc -l < $1)echo "There are $nlines lines in $1"

我们去掉了第一个脚本中的 read 命令和第一个 echo 命令,这样脚本看起来更加简洁。

这样,在运行脚本的时候,可以将文件名作为参数传递:​

./count_lines.sh    /etc/groupThere are 73 lines in /etc/group

传递多个参数

可以一次性向 bash 脚本传递多个参数。通常情况下,以下是向脚本传递多个参数的语法:

script.sh arg1 arg2 arg3

第二个参数将由 $2 变量引用,第三个参数由 $3 引用,以此类推。

这里大家可能有一个疑惑,第一个变量是 $1,那么 $0 是用来做什么的呢?其实 $0 变量用于 bash 脚本的名称。

现在我们再来修改一下 count_lines.sh 脚本文件,以便其可以计算多个文件的行数,如下:​

#!/bin/bash
n1=$(wc -l < $1)n2=$(wc -l < $2)n3=$(wc -l < $3)
echo "There are $n1 lines in $1"echo "There are $n2 lines in $2"echo "There are $n3 lines in $3"

运行脚本,并传递三个文件作为参数:

如上图所示,脚本输出了三个文件的行数;当然,有一点是不言而喻的,输出信息是依文件顺序的。

由 bash shell 中的参数想到的

Linux 有很多命令,其中有一些比较复杂,比如有很长的语法,或者很多的选项。不过我们可以通过使用 bash 参数,将那些很难的命令变为很简单的任务。

看如下 find.sh 脚本:​

#!/bin/bash
find / -iname $1

这是一个很简单但是很有用的脚本,提供文件名作为参数,脚本会打印出文件的位置:

通过上图可以看到,这个脚本比单纯的使用 find 命令​要简单的多。这就说明了可以使用参数将 Linux 中比较复杂的命令转为比较简单的 bash 脚本。

上述脚本中的 2> /dev/null,是指将报错信息重定向到 /dev/null,也就是不打印报错信息。大家可参考:

Linux 中如何将输出和错误重定向到 /dev/null

bash shell 中的特殊变量

bash 中有很多内置的特殊变量,使用非常方便。如下是最常见的:

变量

描述

$0

bash 脚本的名称

$1, $2...$n

bash 脚本的参数

$$

当前 shell 的进程 ID

$#

传递给脚本的参数总数

$@

传递给脚本的所有参数的值

$?

上一个执行命令的退出状态

$!

上次执行命令的进程 ID

大家可以实际查看一下这些特殊变量,参考如下 variables.sh 脚本:​

#!/bin/bash
echo "Name of the script: $0"echo "Total number of arguments: $#"echo "Values of all the arguments: $@"

然后提供几个参数运行脚本:

来源:TIAP内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯