• 三、Shell特殊变量


    SHELL中单引号和双引号的区别

    1. ‘’ 在单引号中所有的字符包括特殊字符($,'',`和)原来是什么就是什么。
    2. “” 在双引号中,$, '', `和会被当成命令解释,其他的原来是什么就是什么。

    注:转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用

    例:

    [root@tzPC ~]# var1=123
    [root@tzPC ~]# echo $var1
    123
    [root@tzPC ~]# echo $var1
    $var1

     给变量赋值,包含空格时需要使用单引号或双引号

    [root@tzPC ~]# var8='tz good'

     单引号跟双引号的区别

    [root@tzPC ~]# var8=good
    [root@tzPC ~]# var9='tz is $var8'
    [root@tzPC ~]# var10="tz is $var8"
    [root@tzPC ~]# echo $var9
    tz is $var8
    [root@tzPC ~]# echo $var10
    tz is good

     删除变量,注意没有$

    [root@tzPC ~]# unset var1

    设置PATH环境变量

    SHELL要执行某个程序,会在系统搜索这个程序的路径,PATH变量就是用来定义BASH查找命令的目录,当我们安装了第三方程序后,可以把第三方程序bin目录追加到PATH后面,就可以全局调用这个程序。

    [root@tzPC ~]# cat /opt/backup
    #!/bin/bash
    echo "Backup data is OK!"
    
    [root@tzPC ~]# backup
    -bash: backup: command not found
    [root@tzPC ~]# PATH=/opt/:$PATH
    [root@tzPC ~]# chmod +x /opt/backup
    [root@tzPC ~]# backup
    Backup data is OK!

     此时的PATH变量为

    [root@tzPC ~]# echo $PATH
    /opt/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

     也可以换行输出查看

    [root@tzPC ~]# echo -e ${PATH//:/'
    '}
    /usr/local/sbin
    /usr/local/bin
    /usr/sbin
    /usr/bin
    /root/bin

    或者在上述4个配置文件中追加上如下环境变量,不过不建议

    export PATH=/opt/:$PATH

     重新加载配置文件,或者重新登陆

    source /etc/profile

    SHELL位置变量

    SHELL解释执行用户命令时,将命令的第一个字符作为命令名,其他字符作为参数

    $0 获取当前执行脚本的文件名,包括脚本路径,命令本身

    $n 获取当前脚本的第n个参数,n=1,2....n,当n大于0用${10}表示

     例:

    [root@tzPC ~]# cat print.sh 
    #!/bin/bash
    echo "脚本名称: $0"
    echo "第一个参数: $1"
    echo "第二个参数: $2"
    echo "第三个参数: $3"
    echo "第四个参数: $4"
    [root@tzPC ~]# chmod +x print.sh 
    [root@tzPC ~]# ./print.sh 1 2 3 4.txt
    脚本名称: ./print.sh
    第一个参数: 1
    第二个参数: 2
    第三个参数: 3
    第四个参数: 4.txt

    SHELL特殊变量

    这些变量一执行程序就被定义了

    $*

    以一个单字符串显示所有向脚本传递的参数;

    如"$*"用【"】括起来的情况、以"$1 $2 … $n"的形式输出所有参数

    $#

    传递到脚本的参数个数

    $$

    当前进程的进程号PID

    $?

    显示最后命令的退出状态;0表示没有错误,其他任何值表明有错误

    $!

    后台运行的最后一个进程的进程号pid

    !$ 上一个命令的最后一个参数

    举例

    [root@tzPC ~]# cat special_var.sh 
    #!/bin/bash
    echo '$* 这个脚本的所有参数:' $*
    echo '$# 表示这个程序参数个数:'  $#
    echo '$$ 表示程序的进程ID: ' $$
    
    touch /tmp/b.txt &
    echo 'touch /tmp/b.txt &'
    echo '$! 表示上一个后台脚本的PID:' $!
    echo '$$ 表示程序的进程ID:' $$
    echo '$? 表示上一个脚本执行返回的结果:'$?
    
    
    [root@tzPC ~]# chmod +x special_var.sh 
    [root@tzPC ~]# ./special_var.sh 1 2 3 
    $* 这个脚本的所有参数: 1 2 3
    $# 表示这个程序参数个数: 3
    $$ 表示程序的进程ID:  6034
    touch /tmp/b.txt &
    $! 表示上一个后台脚本的PID: 6035
    $$ 表示程序的进程ID: 6034
    $? 表示上一个脚本执行返回的结果:0

    数组变量

    能存储多个值的变量

    数组的赋值

    [root@tzPC ~]# mytest=(one tow three four five)

     取值

    [root@tzPC ~]# echo ${mytest[0]}
    one

    数组索引值都是从0开始的

    显示整个数组变量,可用*通配符

    [root@tzPC ~]# echo ${mytest[*]}
    one tow three four five

    修改数组值

    [root@tzPC ~]# mytest[2]=3
    [root@tzPC ~]# echo ${mytest[*]}
    one tow 3 four five

    删除数组值

    [root@tzPC ~]# unset mytest[2]
    [root@tzPC ~]# echo ${mytest[*]}
    one tow four five
    [root@tzPC ~]# echo ${mytest[2]}

     注意删除数组某个值,显示所有看起来没有了,其实该值为空

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    Selector + 线程池 遇到的问题
    【转】Android TabActivity无法正常bindService解决方法
    Android 中的 Service 全面总结
    【转】IT 圈里有哪些经常被读错的词?
    【转】线程的7种状态及相互转换
    【eoeandroid 特刊】第117期打包网盘下载地址
    使用 Android 自带的 proguard 混淆源码
    Google+ 连接不上的解决办法
    【转】AsyncTask的用法
    winForm简单数据绑定
  • 原文地址:https://www.cnblogs.com/tz90/p/13306267.html
Copyright © 2020-2023  润新知