linux中shell 特殊变量$0 $n $* $@ $! $?的详解

$0:获取当前执行脚本的文件名,包括路径。

[root@test script]# cat 0.sh 
#!/bin/bash
echo $0
[root@test script]# sh 0.sh 
0.sh
[root@test script]# cat 0.sh 
#!/bin/bash
dirname "$0"
basename "$0"
[root@test script]# sh /byrd/script/0.sh 
/byrd/script
0.sh

$n:获取当前执行的shell脚本的第N个参数,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来like${10}.

[root@test script]# cat n.sh 
#!/bin/bash
echo $1 $2 ${10}
[root@test script]# sh n.sh a b c d e f g h i j k l m n
a b j
[root@LAMP script]# sh n.sh {a..z}
a b j
[root@test script]# sh n.sh `seq 11` 
1 2 10

$*:获取当前shell的所有参数,将所有的命令行参数视为单个字符串。
$@:这个程序的所有参数"$1" "$2" "$3" "...",这是将参数传递给其他程序的最佳方式,因此TA会保留所有内嵌在每个参数里的任何空白。
$#:获取当前shell命令行中参数的总个数。

[root@test script]# cat hashtag.sh 
#!/bin/bash
echo "$#"
[root@test script]# sh hashtag.sh 
0
[root@test script]# sh hashtag.sh 1 2 3
3
[root@test script]# sh hashtag.sh `seq 300`
300
[root@test script]# cat example.sh 
#!/bin/bash
#Example
if [ $# -ne 2 ];then
    echo "Error, please enter two parameters."
    exit 1
else
    echo "You did a good job."
fi
[root@test script]# sh example.sh a 
Error, please enter two parameters.
[root@test script]# sh example.sh a b
You did a good job.
[root@test script]# sh example.sh a b c
Error, please enter two parameters.
$_:代表上一个命令的最后一个参数
$$:代表所在命令的PID

[root@LAMP script]# cat dollar.sh 
#!/bin/bash
echo "$$" >/tmp/dollar.pid
while true
do
    sleep 1
done
[root@LAMP script]# sh dollar.sh 
################################################
[root@LAMP ~]# cat /tmp/dollar.pid 
1483
[root@LAMP ~]# ps -ef |grep 1483
root      1483  1453  0 14:58 pts/1    00:00:00 sh dollar.sh
root      1532  1483  0 14:58 pts/1    00:00:00 sleep 1
root      1534  1496  0 14:58 pts/0    00:00:00 grep 1483
[root@LAMP ~]# ps -ef |grep dollar
root      1483  1453  0 14:58 pts/1    00:00:00 sh dollar.sh
root      1555  1496  0 14:58 pts/0    00:00:00 grep dollar

$!:代表最后执行的后台命令的PID
$?:代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0

[byrd@LAMP script]$ pwd
/byrd/script
[byrd@LAMP script]$ echo $?
0    #运行成功
[byrd@LAMP script]$ ls /root
ls: cannot open directory /root: Permission denied
[byrd@LAMP script]$ echo $?
2    #权限拒绝
[byrd@LAMP script]$ hahaha
-bash: hahaha: command not found
[byrd@LAMP script]$ echo $?

127    #未找到该命令

###########################################
[byrd@LAMP ~]$ cat /byrd/script/question_mark.sh 
#!/bin/bash
#Example
ls -al /root >/dev/null 2>&1 
if [ $? -eq 0 ];then
    echo "User is root"
else
    echo "The user is not root"
fi
[root@LAMP script]# sh question_mark.sh 
User is root
[root@LAMP script]# su - byrd
[byrd@LAMP ~]$ sh /byrd/script/question_mark.sh 
The user is not root

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值