Bash 初学者系列 3:给 bash 脚本传递参数
我们在上一篇文章中介绍了如何在 bash 脚本中使用变量,可以响应各种数据以及接收用户输入。
今天我们将介绍如何通过命令行将变量以参数的形式传递给 bash 脚本。
向 bash 传递参数
下面脚本 count_lines.sh 将输出用户指定的文件的总行数:
例如,用户可以输入文件 /etc/passwd,脚本将输出行数:
脚本运行良好;然而,还有进一步优化的空间。
我们可以让用户在运行脚本时简单地将文件名作为命令行参数传递,而不是提示用户输入文件名,如下所示:
第一个 bash 参数(也称为位置参数)可以在 bash 脚本中使用 $1 访问。所以在 count_lines.sh 中,可以按如下方式将文件名变量替换为 $1:
我们去掉了第一个脚本中的 read 命令和第一个 echo 命令,这样脚本看起来更加简洁。
这样,在运行脚本的时候,可以将文件名作为参数传递:
传递多个参数
可以一次性向 bash 脚本传递多个参数。通常情况下,以下是向脚本传递多个参数的语法:
第二个参数将由 $2 变量引用,第三个参数由 $3 引用,以此类推。
这里大家可能有一个疑惑,第一个变量是 $1,那么 $0 是用来做什么的呢?其实 $0 变量用于 bash 脚本的名称。
现在我们再来修改一下 count_lines.sh 脚本文件,以便其可以计算多个文件的行数,如下:
运行脚本,并传递三个文件作为参数:
如上图所示,脚本输出了三个文件的行数;当然,有一点是不言而喻的,输出信息是依文件顺序的。
由 bash shell 中的参数想到的
Linux 有很多命令,其中有一些比较复杂,比如有很长的语法,或者很多的选项。不过我们可以通过使用 bash 参数,将那些很难的命令变为很简单的任务。
看如下 find.sh 脚本:
这是一个很简单但是很有用的脚本,提供文件名作为参数,脚本会打印出文件的位置:
通过上图可以看到,这个脚本比单纯的使用 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 脚本:
然后提供几个参数运行脚本:
相关文章
- K8S安装gitlab runner 实践二
- 平均查找性能提高了 715 倍,Linux 6.2 合并华为贡献的代码,华为OD火到国外!
- AI科普文章 | 语音识别准不准?—— ASR 效果评测原理与实践
- 欺上瞒下!刘强东痛批京东中高层拿PPT欺骗自己!
- 高延时下如何快速传输大量文件
- 腾讯云服务器使用教程
- 下载神器IDM+,比迅雷还快的工具 IDM多个版本(电脑、手机、浏览器插件都有)
- IDM+您装了没老司机 ?您想要的超快万能下载神器!idm多个版本
- 下载神器IDM_6.37绿色特别版分享 IDM多个版本(电脑、手机、浏览器插件都有)
- Photoshop CC2015软件安装教程--PS软件全版本
- Photoshop CC2020电脑软件下载 简单软件安装教程-PS软件全版本
- Photoshop CS4软件安装教程-PS软件全版本
- IDM绿色极速下载,谁用谁知道!!idm多个版本(电脑、手机、浏览器插件都有)
- Photoshop CC2019电脑软件下载 简单软件安装教程-PS软件全版本
- 小项目如何进行跨平台方案选型?
- 深度 | IDM的进阶使用, IDM多个版本下载(电脑、手机、浏览器插件都有)
- Redis-基础篇
- IDM 6.38安装包(附安装教程)IDM多个版本(电脑、手机、浏览器插件
- IDM v6.37 电脑上高速下载idm多个版本(电脑、手机、浏览器插件都有)
- 设备点检巡检系统助力企业提高设备生产率!