• Shell脚本 (二) 变量与运算符


    个人博客网:https://wushaopei.github.io/    (你想要这里多有)

    四、Shell 中的变量

     1、系统变量

    1.1 常用系统变量

     $HOME、 $PWD、 $SHELL 、$USER等

    1.2 案例实操

    (1)查看系统变量的值

    [root@rich datas]# echo $HOME
    /root
    [root@rich datas]# echo $PWD
    /home/wenmin/datas
    [root@rich datas]# echo $SHELL
    /bin/bash
    [root@rich datas]# echo $USER
    root
    

    (2)显示当前Shell中所有变量: set

    2、自定义变量

     2.1 基本语法

    (1) 定义变量: 变量 = 值

    (2)撤销变量: unset 变量

    (3)声明静态变量: readonly 变量,注意: 不能 unset

    2.2 变量定义规则

    (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写

    (2)等号两侧不能有空格

    (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

    (4)变量的值如果有空格,需要使用双引号或单引号括起来

    2.3 案例实操

     (1)定义变量A

    [root@rich datas]# A=5
    [root@rich datas]# echo $A
    5
    

     (2)给变量A重新赋值

    [root@rich datas]# A=88
    [root@rich datas]# echo $A
    88
    

    (3)撤销变量

    [root@rich datas]# unset A
    [root@rich datas]# echo $A
    
    

    (4)声明静态的变量B=3 ,不能unset

    [root@rich datas]# readonly B=3
    [root@rich datas]# echo $B
    3
    [root@rich datas]# unset B
    -bash: unset: B: 无法反设定: 只读 variable
    

    (5)在bash中,变量默认类型都是字符串类型,无法直接进行述职运算

    [root@rich datas]# C=1+1
    [root@rich datas]# echo $C
    1+1
    

    (6)变量的值如果有空格,需要使用双引号或单引号括起来

    [root@rich datas]# D=wenxing love me
    bash: love: 未找到命令...
    [root@rich datas]# D="wenxing love me"
    [root@rich datas]# echo $D
    wenxing love me
    

    (7)可把变量提升为全局环境变量,可供其他Shell程序使用

         export  变量名

    [root@rich datas]# vim helloworld.sh 
    
    在helloworld.sh 文件中增加 echo $D
    
    #!/bin/bash
    
    echo "helloworld wenmin"
    echo $D
    

    执行脚本:

    [root@rich datas]# ./helloworld.sh 
    helloworld wenmin
    

    发现没有打印输出变量D的值

    [root@rich datas]# export D
    [root@rich datas]# ./helloworld.sh 
    helloworld wenmin
    wenxing love me
    

    将局部变量提升为全局变量后,属于不同进程的脚本也可以调用全局变量的 $D  的进程,进而执行对应脚本命令

    3、特殊变量:$n

     3.1 基本语法

    $n  (功能描述: n为数字,$0 代表该脚本名称, $1-$9 代表第一道第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

     3.2 案例实操

    (1)输出该脚本文件名称、输入参数1 和 输入参数2 、输入参数3 的值

    [root@rich ~]# touch parameter.sh
    [root@rich ~]# vim parameter.sh 
    
    #!/bin/bash
    
    echo "$0 $1 $2 $3"
    

    执行脚本:

    [root@rich ~]# bash parameter.sh 
    parameter.sh   
    [root@rich ~]# bash parameter.sh wenmin   // 写入一个参数
    parameter.sh wenmin  
    [root@rich ~]# bash parameter.sh wenmin love   // 写入两个参数
    parameter.sh wenmin love 
    [root@rich ~]# bash parameter.sh wenmin love mm  // 写入三个参数
    parameter.sh wenmin love mm
    [root@rich ~]# bash parameter.sh wenmin love mm 1  // 写入三个参数,最后一个没有被接收到
    parameter.sh wenmin love mm
    

    脚本中设定的输入参数最多为  3  个,所以,当执行语句后的参数个数超过三个后,不再被写入。

    4、特殊变量: $#

    4.1 基本语法

    $#  (功能描述: 获取所有输入参数个数,常用于循环)

    4.2 案例实操

    (1)获取输入参数的个数

    [root@rich ~]# vim parameter.sh 
    
    #!/bin/bash
    
    echo "$0 $1 $2 $3"
    echo $#
    

    执行脚本:

    (a)

    [root@rich ~]# bash parameter.sh wenxin
    parameter.sh wenxin  
    1
    [root@rich ~]# bash parameter.sh wenxin wenmin
    parameter.sh wenxin wenmin 
    2
    [root@rich ~]# bash parameter.sh wenxin wenmin wenchang
    parameter.sh wenxin wenmin wenchang
    3
    

    或(b)

    [root@rich ~]# chmod 777 parameter.sh 
    [root@rich ~]# ./parameter.sh cls xz
    ./parameter.sh cls xz 
    2
    

    5、特殊变量: $* 、$@

    5.1 基本语法

      $*  (功能描述: 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体)

    $@  (功能描述: 这个变量也代表命令行中所有的参数,不过$@  把每个参数区分对待)

    5.2 案例实操

    (1) 打印输入的所有参数

    [root@rich ~]# vim parameter.sh 
    
    #!/bin/bash
    
    echo "$0 $1 $2 $3"
    echo $#
    echo $*
    echo $@
    

    执行脚本:

    [root@rich ~]# ./parameter.sh wenmin wenxin wenchang
    ./parameter.sh wenmin wenxin wenchang
    3
    wenmin wenxin wenchang  //$*
    wenmin wenxin wenchang  //$#
    

    从执行的结果来看,$* 和$@ 好像没有什么区别,但是实际在执行过程中,$*会对输入的多个参数看成一个整体来执行,而$@则会将输入的多个参数按照顺序依次执行;在参数数量较少的情况下,两者没有什么差别。

    6、特殊变量 $?

    6.1 基本语法

    $? (功能描述: 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是那个数,由命令自己来决定),则证明上一个命令执行不正确了。)

    6.2 案例实操

    (1) 判断helloworld.sh 脚本是否正确执行难

    [root@rich wenmin]# cd datas/
    [root@rich datas]# ./helloworld.sh 
    helloworld wenmin
    [root@rich datas]# $?
    bash: 0: 未找到命令...
    [root@rich datas]# echo $?  //当上一条命令没有正确执行时,echo $?返回 127
    127
    [root@rich datas]# ./helloworld.sh 
    helloworld wenmin
    [root@rich datas]# echo $?  //当上一条命令正确执行时,echo $?返回 0
    0
    [root@rich datas]# 
    

    五、 运算符

    1、基本语法

    (1)“$((运算式))” 或 “$[运算式]”

    (2)expr + , - , * , / , %   加,减,乘,除,取余

               注意: expr 运算符间要有空格

    2、案例实操:

    (1)计算 3+2 的值

    [root@rich datas]# expr 3 + 2 
    5
    

    (2)计算 3-2 的值

    [root@rich datas]# expr 3 - 2 
    1
    

    (3)计算(2+3)X4 的值

         (a) expr一步完成计算

    [root@rich datas]# expr `expr 2 + 3` * 4 
    20
    

         当前表达式中, 被   “ ` ” 所包含的运算式会先执行,再结果的基础上再与外面的运算式继续执行乘的操作

       (b)采用$[运算式]方式

    [root@rich datas]# s=$[(2+3)*4]
    [root@rich datas]# echo $s
    20
    
  • 相关阅读:
    nioSocket
    Socket
    常见协议和标准
    Object类clone方法
    java中的运算符
    java中方法的定义
    Spring中实现定时调度
    Spring中对资源的读取支持
    HashMap的实现原理
    固定Realm 与配置数据库连接实现登录验证
  • 原文地址:https://www.cnblogs.com/wushaopei/p/11979251.html
Copyright © 2020-2023  润新知