Linux Shell bash脚本中的 $! $$ $- $0 $1~$n ${n} $# $@ $* $?

变量说明

$! : 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

发现一个好东东 $_ $下划线
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值