• 《Linux shell变量总结回顾》RHEL6(转)


    文章版权:http://www.cnblogs.com/linux-super-meng/

    环境变量路径:

    [root@localhost ~]# set   //查看到的是局部变量和全局变量2

    [root@localhost ~]# env  //查看系统的全局环境变量

    [root@localhost ~]# echo $PATH  //查看系统环境变量路径

    [root@localhost ~]# export $PATH  //也可以使用export查看环境变量路径

    [root@localhost ~]# export PATH=$PATH:/date/  //临时添加/date目录到环境变量路径下

    要想重启主机后还生效就要编辑环境配置文件root/.bashec或/root/.bash_profile与/etc/profile文件,想要立刻生效可以使用命令:

    注:.bash_profile文件支队系统当前用户生效

    [root@localhost ~]# source .bash_profile  

    [root@localhost ~]# ls –a    可以查看到这2个文件

     

    脚本的执行:

    sh script    //这种方法script不需要可执行权限

    ./ script          //必须具有可执行权限

    . script           //这种方法script也不需要可执行权限

                           

    区分局部变量和全局变量

    [root@localhost ~]# str=1000   //局部变量

     

    [root@localhost ~]# echo $str

    1000

    去编辑一个脚本:

    # vim bianliang.sh

    #!/bin/bash

    echo $str

    [root@localhost ~]# bianliang.sh  //我们定义的变量,但是通过脚本却不能输出

     

    [root@localhost ~]# export str   //添加到全局变量中

    [root@localhost ~]# bianliang.sh   //再次使用完全ok

    1000

    要想完全的清除某个全局变量:

    # unset str  清除全局变量

    #env   可以查看到所有全局变量

    && || 的用法:(参数的比对)

    && 条件符合要求才会执行后面的动作

    ||    条件不符合要求时才会执行后面的动作

    //查看/ect目录下是否有/grub.conf文件,有则输出yes,无则输出no。

    [root@localhost ~]# [ -f /etc/grub.conf ] && echo yes  || echo no 

    Yes        

    查看/shellscripts/hello.sh是否可执行,可执行则输入yes,否则就赋予它可执行权限

    [root@localhost shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh

    [root@localhost shellscripts]# ls

    hello.sh  ipadd.sh  logmess_clean.sh 

    [root@localhost shellscripts]# hello.sh

    hello world!   

    “”和‘’与 ` ` shell变量中的区别       

    “ ” 允许通过$符引用其他变量

    ‘’禁止引用其他变量符,视为普通字符

    `` 将命令执行的结果输出给变量

    [root@localhost ~]# echo "$PWD is lujing"

    /root is lujing

    [root@localhost ~]# echo '$PWD is lujing'

    $PWD is lujing

    [root@localhost ~]# echo $a

    1000

    [root@localhost ~]# echo $aaaaaaaa  //系统把$aaaaa视为一个变量

     

    [root@localhost ~]# echo ${a}aaaaaa   //把变量用{}括起来,系统才会去输出变量

    1000aaaaaa

    #echo `ls`  反引号中的命令时可以单独执行的,然后再由echo输出

     

    扩展:” “反斜杠,作用屏蔽字符的特殊意义

    test命令

     用途:测试表达式是否成立,成立返回值为0,否返回值为其他值。

     格式:test  条件表达式  [条件表达式]

     

     ≡ 常见的测试类型

          测试文件的状态

          字符的串比较

          整数值比较

          逻辑测试

     

    测试文件的状态

       格式:[操作符   文件或目录]

      常见的测试操作符

    -d :测试是否为目录【directory

     

    [root@localhost /]# [ -d /var/spool/ ]

    [root@localhost /]# echo $?

    0

     

    -e:测测试目录或文件是否存在【exist

     

    [root@localhost /]# [ -e /etc/passwd ]

    [root@localhost /]# echo $?

    0

     

    -f:测试是否为文件【file

     

    [root@localhost Packages]# [ -f /etc/passwd ]

    [root@localhost Packages]# echo $?

    0

    [root@localhost Packages]#

     

    -r:测试当前的用户是否有读取的权限read

     

    [root@localhost /]# [ -r /etc/shadow ]

    [root@localhost /]# echo $?

    0

    [root@localhost /]#

     

    -w:测试当前的用户是否有写的权限【write

     

    [root@localhost /]# [ -w /etc/shadow ]

    [root@localhost /]# echo $?

    0

    [root@localhost /]#

     

    -x:测试当前的用户是否可执行和该文件【excute

     

    [root@localhost /]# [ -x /etc/shadow ]

    [root@localhost /]# echo $?

    1

    [root@localhost /]# ll /etc/shadow

    ----------. 1 root root 1086 2月  26 22:38 /etc/shadow

     

    -L:测试是否为符号链接文件【link

     

     

    [root@localhost /]# ll /etc/shadow

    ----------. 1 root root 1086 2月  26 22:38 /etc/shadow

    [root@localhost /]# [ -L /etc/shadow ]

    [root@localhost /]# echo $?

    1

    整数值比较

     格式:[ 整数1 操作符整数2 ]

    常用的操作测试符

      -eq:等于(Equal

      -ne:不等于(Not Equal

      -gt:大于(Greater Than

      -lt:小于(Lesser Than

      -le:小于或等于(Lessser or Equal

      -ge:大于或等于(Greater or Equal

    案例

      如果登录用户数小于或等于10则输出YES

     

    [root@localhost 桌面]# who|wc -l

    2

    [root@localhost 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"

    YES

     

    变量的加减法运算:

    变量的加法运算:

    [root@localhost ~]# a=1000

    [root@localhost ~]# echo $a

    1000

    [root@localhost ~]# expr $a + $a

    2000

    [root@localhost ~]# echo $a + $a              //这是2中错误的操作,运算必须使用expr

    1000 + 1000

    [root@localhost ~]# expr $a+$a                //$a + $a 要有空格否则也是错误的

    1000+1000

    变量的乘法运算:

    [root@localhost ~]# expr $a * $a              //* 在操作系统中视为特殊字符,屏蔽字符的特殊意义

    expr: syntax error

    [root@localhost ~]# expr $a * $a

    1000000

    [root@localhost ~]# expr 2 / 1      //除法

    2

    [root@localhost ~]# expr 2 – 1        //减法

    1

    [root@localhost ~]# expr 2 % 1                //取余

    0

    位置变量:

    0-9           常用的为1-9

    通过脚本来看些位置变量:

    [root@localhost shellscripts]# cat a.sh

    #!/bin/bash

    echo $1

    echo $2

    echo $3

    echo $0

    [root@localhost shellscripts]# a.sh a b c d e

    a

    b

    c

    /shellscripts/a.sh           //$0打印的是脚本笨的名字

     

    [root@localhost shellscripts]# a.sh 1 2

    3

    [root@localhost shellscripts]# a.sh 2 3

    5

    [root@localhost shellscripts]# cat a.sh

    #!/bin/bash

    echo `expr $1 + $2`             //$1和$2代表了2个位置变量

    [root@localhost shellscripts]#

     

    预定义变量

    $#  : 命令行中位置参数的个数

    $*  : 所有位置参数的内容

    $?  : 上一条命令执行后返回的状态,当状态为0时表示正常,非0表示执行异常或出错。

    $$  : 当前所在进程的进程号

    $!  :  后台运行的最后一个进程号

    $0  :  当前执行的进程/进程名

    脚本的规范书写:

    #!/bin/bash

    #Date : 2014-5-28

    #Author : Create by meng       //脚本的创始人

    #Mail :~~                                   //邮件地址

    #Func (do):this is useradd user script.            //脚本的作用

    #V1.1                  //脚本的版本

    echo "hello,world!"            //后面的才是脚本的内容

     

    文章版权:http://www.cnblogs.com/linux-super-meng/

     

    字符串比较

     格式 [ 字符串1 = 字符串2 ]

          [ 字符串1 != 字符串2 ]

          [ -z 字符串 ]

     

    常用的测试操作符

      =:字符串内容相同

     !=:字符串内容不相同,!号表示相反的意思

      -z:字符内容为空

    #read -p "input your name: "  name

    root

    #echo $name

    #[ $name != "root"] && echo "name is erro"

    ##read -p "input your name: "  name

    zhangsan

    #[ $name != "root"] && echo "name is erro"

    #echo $name

    文章版权:http://www.cnblogs.com/linux-super-meng/

     

    逻辑测试

       格式:[表达式1]   操作符  [表达式2]

      常用的测试操作符

       -a &&:逻辑与,“而且”的意思

      #前后两个表达式都成立是整个测试结果才为真,否则为假

       (前面真则执行后面)

       -o||:逻辑或,或者的意思

       #操作符两边至少一个为真时,结果为真,否则结果为假

        (前面假则执行后面)

       !:逻辑否

      #当指定条件不成立时,返回结果为真

     

         if条件语句   --单分支

    当“条件成立“时执行相应的操作

             if  条件测试命令               if 磁盘已用空间>80%

                     then 命令序列   ==      then 报警

               fi             

    应用案例:

      如果/boot分区的空间使用超过80%,输出报警信息

      #!/bin/bash

     RATE=`df |awk'NR==4{print int($5)}'`

     if [$RATE -gt 80]

      then

      echo "warning,DISK is full!"

      if

     

     

                     if条件语句--双分支

    当“条件成立”、“条件不成立”时执行不同的操作

     

    if 条件测试命令                if 3306端口是否在监听状态

     then 命令序列1         ==      then mysqld 服务已运行

     else 命令序列2                    else 启动mysqld服务

    fi                   

     

    引用案例:

    判断vsftp是否在运行。若已运行则输出提示信息,否则重新启动vsftp服务

    #!/bin/bash

    service vsftp status &>/dev/null

     if [ $? -eq 0 ]

    then

     echo "vsftp service is running"

     else

      /etc/init.d/vsftp restart

     fi

     

    如果/boot分区的空间使用超过80%,输出警报信息。我们来写个脚本

     

    #vi a.sh

    #!/bin/bash

    #a.sh

    NUM=`df | awk 'NR==5{print int($5)}'`

    if

    [ $NUM -gt 80 ]

    then

     echo "Warning,DISK is full!"

    if

     

    awk的额外扩展

     

    [root@localhost ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}'

    root

    lenovo

    [root@localhost ~]# ^C

    文章版权:http://www.cnblogs.com/linux-super-meng/

     

    for循环语句                            for  收件人  in 邮件地址列表

    根据变量的不通值,重复执行一组命令操作   ==                do

    for 变量名  in 取值列表                       发邮件    

    do                                        done

    命令序列

    done

     

    #!/bin/bash

    for TM in a b c d e

    do

    echo $TM

    sleep 1

    done

    ~                                                                                                                                                                 

    重复测试指定的条件,只要条件成立则反复执行对应的命令操作

     

    while 命令或表达式          while 可用内存<100mb

    do             ==do

         命令列表      获取可用内存数

    done                    done

    文章版权:http://www.cnblogs.com/linux-super-meng/

     

    多重分支语句

    root@localhost ~]# cat a.sh

    #!/bin/bash

    #a.sh

    case $1 in

    start)

          echo "start...."

               ;;

    stop)

          echo "stop......"

          ;;

    restart)

          echo "restart........"

          ;;

    laod)

         echo "laod......."

          ;;

    status)

          echo "start....."

          echo "stop......"

          ;;

    esac

     

    [root@localhost ~]# ./a.sh start

    start....

    [root@localhost ~]# ./a.sh stop

    stop......

    [root@localhost ~]#

    [root@localhost ~]# cat a.sh

    #!/bin/bash

    #a.sh

    read -p "input:" NUM

    case "$NUM" in

    [a-z]|[A-Z])

          echo "it is english"

          ;;

    [0-9])

          echo "it is shuzi"

          ;;

    *)

          echo "........."

          ;;

    esac

    [root@localhost ~]#

     

    [root@localhost ~]# ./a.sh

    input:2

    it is shuzi

    [root@localhost ~]# ./a.sh

    input:a

    it is english

    [root@localhost ~]# ./a.sh @

    input:@

    .........

    [root@localhost ~]# ./a.sh

    input:#

    .........

    [root@localhost ~]#

     

          shift迁移语句

    用于迁移位置变量,将$1~$9依次向左传递

     

    [root@localhost ~]# ./a.sh 10 20

    The sum is: 30

    [root@localhost ~]# cat a.sh

    #!/bin/bash

    #a.sh

    Result=0

    while [ $# -gt 0 ]

          do

    Result=`expr $Result + $1`

          shift

          done

          echo "The sum is: $Result"

    [root@localhost ~]#

     

     

    break语句

     

    用于跳出当前的循环体,执行循环体后的语句。

     

    函数的应用

     

    [root@localhost ~]# ./c.sh

    46

    55

    [root@localhost ~]# cat c.sh

    #!/bin/bash

    #c.sh

    adder(){

    echo `expr $1 + $2`

    }

     

    adder 12 34

    adder 22 33

    [root@localhost ~]# ./c.sh

    46

    55

    [root@localhost ~]#

     

     

    声明:以上知识全来自与自学shell编程总结回顾

  • 相关阅读:
    用ADO方式连接Excel
    RTX51 tiny系统容易混淆的问题
    学用NHibernate(一)
    Firefox兼容性
    使用WebClient后的Response编码的问题
    学用ASP.NET2.0
    安装CS2.0 Beta2 到SQL2005+Asp.Net2.0下
    AJAXSLT 的bug修正(2)
    Asp.Net开发小技巧
    URL重写,友好的URL
  • 原文地址:https://www.cnblogs.com/softidea/p/3756891.html
Copyright © 2020-2023  润新知