linux的bash shell编程笔记--脚本参数

前言

自从接触linux以来,看过一些脚本,但是还从没正儿八经的写过一个脚本。这次本人被分配一个任务,写一个数据文件维护工具,数据文件是公司软件内部产生的一些记录,这些文件分散在各个目录。已经写了一个对单个文件处理的小工具,现在需要一个脚本遍历指定目录、指定类型的文件,对这些文件调用前述工具来进行处理。写下此文来总结此次编写脚本所涉及的bash shell知识。

脚本参数

因为脚本需要执行时输入两个参数,一个参数指定目录,另一个可选参数指定是否需要递归遍历,执行时如下:
[root@localhost ~]# ./calltools.sh dir -r
Bash通过 位置变量参数来向脚本传递参数, 位置变量参数是只读的。可以向脚本传递任意多个参数,但是只有前9个参数才可以被脚本访问,使用shift命令可以改变这个限制。但是目前对于我来说,还没有用到超过9个参数的情况,所以先不研究shift如何使用。 脚本中通过$1~$9来访问第一个到第九个参数。$0预保留保存脚本的名字。
示例:
echo-argname.sh
#!/bin/bash
echo "script name: $0"
echo "first argname: $1"
echo "second argname: $2"
echo "third argname: $3"
echo "forth argname: $4"
在终端中输入:
[root@localhost ~]#./demo/echo-argname.sh aa bb cc dd
得到输出结果:
script name: ./demo/echo-argname.sh
first argname: aa
second argname: bb
third argname: cc
forth argname: dd
需要注意的是$0的作用其实非常大。例如,对于我此次任务来说,处理文件的工具和脚本在同一个目录,我在脚本中需要调用它,但是我并不知道这个脚本会部署在哪个目录,如何正确无误的调用这个工具呢? 这就需要$0来帮忙了。通过 dirname就可以获取得到脚本所在目录,代码如下:
script-path.sh
#!/bin/bash
script_path=$(dirname $0)
echo $script_path
在终端中输入:
[root@localhost ~]#./demo/script-path.sh
得到输出结果:
./demo

Bash除了$0之外,还有一些其他的保留变量参数:
特定变量
$#   传递到脚本的参数个数
$*    以一个单个字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$    脚本运行的当前进程ID号
$!     后台运行的最后一个进程的ID号
$@  与$#相同,但是使用时加引号,并在引号中返回每个参数
$-     显示shell使用的当前选项
$?    显示最后命令的退出状态,0表示没有错误,否则表明有错误

考虑所有的知识总结写在这一篇文章篇幅显得过大,还是分开记录好些,后面陆续总结一些shell知识。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值