1,怎么使用命令行位置参数
什么是命令行位置参数?举个简单的例子
$ ls
$ ls $HOME/Documents/123.txt
$ ./123 10 + 23
$ /etc/init.d/named reload
上面这四行命令行语句中位置参数列成表格来看更加清晰,
命令行指令($0) | 位置参数个数($#) | 位置参数($1…$9) |
---|---|---|
ls | 0 | Null |
ls $HOME/Documents/123.txt | 1 | $HOME/Documents/123.txt |
./123 10 + 23 | 3 | 10,+,23 |
/etc/init.d/named reload | 1 | reload |
举个栗子:
#! /bin/bash
#__Filename__ : begin10.sh
#__Auther__ : simileciwh
#Email : simileci.wh.32@outlook.com
#Created date : 2018-11-30 14:53:14
# code is far away from bugs with the god animal protecting
# I love animals. I have a lovely doggy!
# ┏┓ ┏┓
# ┏┛┻━━━━━┛┻┓
# ┃ ☃ ┃
# ┃ ┳┛ ┗┳ ┃
# ┃ ┻ ┃
# ┗━┓ ┏━┛
# ┃ ┗━━━┓
# ┃ 神兽保佑 ┣┓
# ┃ 永无BUG! ┏┛
# ┗┓┓┏━━┳┓┏┛
# ┃┫┫ ┃┫┫
# ┗┻┛ ┗┻┛
IFS=", "
echo "Display all words using \$@"
echo "$@"
echo
echo "Display all words using \$*"
echo "$*"
执行结果:
./begin10.sh we like each other
Display all words using $@
we like each other
Display all words using $*
we,like,each,other
**在这里,命令行的输入位置参数有"we, like, each, other"一共4个。$@会获得所有命令行输入测参数或者变量;$* 会以"$1y$2y$3y$4y"这种形式获得命令行位置输入的参数或者变量,而y的值是由$IFS确定的 **
因此,在本例中,使用两种方式获得命令行输入的位置参数或者变量。 IFS 在程序开始设置了默认值,因此$@和$*的输出样式不同。
sdadkjal | 含义 |
---|---|
$* | 获得所有命令行的位置参数和变量 |
$@ | 获得所有命令行的位置参数和变量 |
$# | 获得位置参数的数量 |
$- | 获得shell支持的flags标志位 |
$? | 获得之前执行命令的返回值 |
$! | 获得最新的背景命令进程号 |
$$ | 获得获得当前shell的进程号 |
举个栗子:
你可以新打开一个终端,然后通过 “$$” 查看当前shell的进程号,并使用 kill 命令将其杀掉。
$ echo $$
>>
>21307
$ kill -9 21307
#你会看到当前命令行自动关闭了。
这个栗子非常的有营养,这一招在bash中也非常的coooool!!!