[toc]
shell特殊位置环境变量
变量 | 含义 |
---|---|
$0 | 脚本名称 |
$n | 位置变量,n代表数字,超过10要用括起来 |
$# | 参数个数 |
$*、$@ | 列出参数 |
$? | 上一个命令的执行结果返回值 |
$() | 表示先执行里边的内容 |
$ | "金庸新著" 和 "金庸新"著 用于区分变量 |
$! | 获取上一个脚本的PID |
$_ | 获取上一个脚本的最后一个参数 |
$- | 显示shell使用的当前选项,与set命令功能相同 |
$0 当前脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径
#编辑脚本内容
$ cat >a.sh <<'EOF'
#!/usr/bin/env bash
echo "当前脚本名为:$0"
EOF
#执行脚本
$ sh a.sh
当前脚本名为:a.sh
#执行路径+脚本名
$ sh /root/a.sh
当前脚本名为:/root/a.sh
$n 位置变量,获取当前执行的脚本的第n个参数,n=1..9,如果n大于9,用大括号括起来$10
#编辑脚本内容
$ cat > b.sh <<'EOF'
#!/usr/bin/env bash
echo "脚本的第1个参数为:$1"
echo "脚本的第10个参数为:${10}"
EOF
#执行脚本
$ sh b.sh 10 9 8 7 6 5 4 3 2 1
脚本的第1个参数为:10
脚本的第10个参数为:1
$# 获取当前执行脚本后接的参数总个数
#编辑脚本内容
$ cat > c.sh <<'EOF'
#!/usr/lib/env bash
echo "脚本参数总个数为:$#"
EOF
#执行脚本
$ sh c.sh 1 2 3 4 5 6
脚本参数总个数为:6
$*和¥@ 列出所有参数
-
$ 以"参数1 参数2 参数3 ..."的形式列出所有参数*
-
$@ 以"参数1" "参数2" "参数3"的形式列出所有参数
*不加引号时,$和$@输出一样
#$*
$ set -- a b c
$ for i in $*;do echo $i;done
a
b
c
#$@
$ set -- a b c
$ for i in $@;do echo $i;done
a
b
c
*加入引号时,$和$@输出不一样
#$*
$ set -- a b c
$ for i in "$*";do echo $i;done
a b c
#$@
$ set -- a b c
$ for i in "$@";do echo $i;done
a
b
c
$? 上一个命令的执行结果返回值
常见返回值
#命令错误,返回值127
$ lp
-bash: lp: 未找到命令
$ echo $?
127
#参数不正确或者文件目录不存在
$ ls -e
ls:无效选项 -- e
Try 'ls --help' for more information.
$ echo $?
2
#权限拒绝,不是目录或文件等等
$ touch /opt/txt
touch: cannot touch ‘/opt/txt’: Permission denied
$ echo $?
1
#命令正确执行
$ ls
$ echo $?
0