当前位置 主页 > 服务器问题 > Linux/apache问题 > 最大化 缩小

    linux中$符号的基础用法总结(2)

    栏目:Linux/apache问题 时间:2019-11-12 16:24

    $0 $1 $n 获取文件名称和参数值,一般在bash脚本中较多

    $0 表示shell脚本文件名;从1开始表示第几个参数,1表示第一个参数。这里我们创建一个test.sh可执行文件

    创建一个test.sh文件并填充代码
    [root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $0 $1 $2' > test.sh
    [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh
    echo $0 $1 $2
    
    执行test.sh 并传入变量
    [root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh i am skyler
    test.sh i am

    可以看到,三个参数中前两个打印出来了,因为我们没有声明$3,所有打印出了文件名称和前两个参数

    $# 获取参数数量

    [root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $# $0 $1' > test.sh
    [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh
    echo $# $0 $1
    [root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh I am a shuashua
    4 test.sh I

    $@ $* 数组的形式引用参数列表

    它们的区别在于使用双引号括起来用时,假设传入的参数为1 2 3,那么"*的值为”1 2 3”一个变量

    test.sh
    echo '$@的数组参数格式'
    for x in "$@"
    do
     echo + $x
    done
    echo '$*的数组参数格式'
    for x in "$*"
    do
     echo + $x
    done
    
    root@izbp10lqlgy2g31s41bt94z:~# sh test.sh 1 2 3
    $@的数组参数格式
    + 1
    + 2
    + 3
    $*的数组参数格式
    + 1 2 3

    $? 判断上一个命令执行是否成功

    执行成功值时0,失败是非0

    [root@izbp10lqlgy2g31s41bt94z ~]# ll
    总用量 172
    -rw-r--r-- 1 root root 49392 2月 25 2019 hs_err_pid24203.log
    -rw-r--r-- 1 root root 49425 2月 13 2019 hs_err_pid25726.log
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $?
    0
    [root@izbp10lqlgy2g31s41bt94z ~]# ca ff
    -bash: ca: 未找到命令
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $?
    127

    $() 等同于使用双引号的作用


    $[] 表达式计算

    此时的[]不是用于判断式的场景,[]作为判断式一般用于bash脚步中if while等条件语句

    [root@izbp10lqlgy2g31s41bt94z ~]# echo $[5 + 5]
    10

    $- 显示shell所使用的当前选项

    [root@izbp10lqlgy2g31s41bt94z ~]# echo $-
    himBH
    
    解释:himBH每一个字符是一个shell的选项,详情man bash然后搜索 -h -B 等。详情参考:http://kodango.com/explain-shell-default-options

    $! 获取后台运行最后一个进程的pid,更多应用在bash脚本

    [root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh &
    [1] 362
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $# $0 $1
    ^C
    [1]+ 完成     cat test.sh
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $!
    362

    !$ 将上一条命令的参数传递给下一条命令的参数,平时用于更方便,更多应用在bash脚本

    [root@izbp10lqlgy2g31s41bt94z ~]# cd /Users/skyler/project/test
    [root@izbp10lqlgy2g31s41bt94z ~]# ll !$
    [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test
    362

    !! 将上一条命令输出 ,平时用于更方便,更多应用在bash脚本

    [root@izbp10lqlgy2g31s41bt94z ~]# !!
    [root@izbp10lqlgy2g31s41bt94z ~]# ll /Users/skyler/project/test