变量说明
$! : Shell最后运行的后台的PID
$$ : Shell本身的PID(ProcessID)
$- : 使用Set命令设定的当前Shell的Flag
$0 : Shell本身的文件名
$1 : 第一个参数
$n 或 ${n} : 第n个参数, n大于等于10时(两位数及以上时)用 ${n}
$# : 执行脚本时, 传入参数的个数
$@ : 执行脚本时, 传入的所有参数的数组集合
$* : 执行脚本时, 传入的所有参数,以空格连接的字符串
$? : 脚本执行完的返回值
测试用脚本
假设在 /MyBashs/ 有脚本 BashScript001.sh , 全路径名: /MyBashs/BashScript010.sh
sudo mkdir -p /MyBashs/
cd /MyBashs/
sudo vi /MyBashs/BashScript010.sh
sudo mkdir -p /MyBashs/ ; cd /MyBashs/ ; sudo vi /MyBashs/BashScript010.sh
脚本头
#!/bin/bash
经测试, 有没有脚本头 ,都可以执行
echo '$!'=$!
echo '$?'=$?
echo '$-='$-
echo '$$='$$
echo '$@='$@
echo '$*'=$*
echo '$%='$%
echo '$0='$0
echo '$#='$#
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$4='$4
echo '$5='$5
printf '$6='"$6\n"
printf '$7='"$7\n"
echo '$8='"$8"
echo '$9='"$9"
echo '$10'=$10
echo '$11'=$11
echo '$12='$123456789
echo '$13='${13}
echo '$14='$14
echo '$15='"${15}"
echo '$16='$16
echo '$17='${17}
echo '$18'=${18}
echo '$19'=${19}
echo '$20'=${20}
echo '$21'=${21}
echo '$22='=${22}
$!
$$
$-
set 命令:可以用来定制shell环境
$- 变量
h:hashall,打开选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选
项关闭
i:interactive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。所谓的交互式shell,
在脚本中,i选项是关闭的
m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等
B:braceexpand,大括号扩展
H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的
一个历史命令,“!n”返回第 n 个历史命令
set 命令实现脚本安全
-u 在扩展一个没有设置的变量时,显示错误信息, 等同set -o nounset
-e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit
-o option 显示,打开或者关闭选项
显示选项:set -o
打开选项:set -o 选项
关闭选项:set +o 选项
-x 当执行命令时,打印命令及其参数,类似 bash -x
$0
$0
能得到脚本文件名
$1 $n ${n}
$#
$@ 和 $*
$@
和$*
都是代表执行脚本时,所有的传入参数, $@
是参数数组, $*
是所有参数用空格分隔的字符串.
在用 for v in
遍历时,不加双引号没有区别,都会逐个, 加上双引号后for v in "$*"
为一个字符串
测试用例代码, 命名为test.sh
echo 'for v in $@'
for v in $@
do
echo $v
done
echo 'for v in $*'
for v in $*
do
echo $v
done
echo '上面的没有加双引号, 下面的加上了双引号'
echo 'for v in "$@"'
for v in "$@"
do
echo $v
done
echo 'for v in "$*"'
for v in "$*"
do
echo $v
done
执行 bash test.sh a b c
bash test.sh a b c
for v in $@
a
b
c
for v in $*
a
b
c
上面的没有加双引号, 下面的加上了双引号
for v in "$@"
a
b
c
for v in "$*"
a b c
$?
$_
mkdir -p /x/y/z ; cd $_
mkdir -p dirName ; cd $_
mkdir -p folderName;cd $_
创建并进入文件夹的通常方法是先创建文件夹再进入文件夹
这样的话,文件夹路径名要写两遍
例如
sudo mkdir -p ~/hello/world/ni/hao
cd ~/hello/world/ni/hao
发现一个好东东 $_
$下划线