zoukankan      html  css  js  c++  java
  • shell脚本变量用法及配置文件

    一、条件测试:(与echo  %?联用)

      ①、test EXPRESSION     test -V NAME   <==>   [ -v NAME]  判断变量是否被定义过。“”空也算被定义过

      ②、[ EXPRESSION ]

      ③、[[ EXPRESSION ]]   (支持通配符与正则表达式)

    二、数值测试:

      -gt  >

      -ge  >=

      -eq  =

      -ne  !=

      -lt  <

      -le  <=

    三、字符串测试:

      -z  判断是否为空(“”也算空)

      -n  判断是否为不空

      =  [ "$str1" = "$str2" ]

      >  ascii的比较

      <  sacii的比较

      !=  支持通配符   [[  "$str1"  !=  *.log  ]]

      ==  支持通配符  [[  "$str1"  ==  *.log  ]]

      =~  支持正则表达式  [[  "str1"  =~  .log$  ]]    判断是否为数字:[[  "$N"  =~  ^[0-9]+$  ]]

    四、文件测试:

      -e   <==> -a  是否存在

      -b

      -c

      -f

      -d

      -s

      -p

      -L   <==> -h

    五、权限测试:

      -r

      -w

      -x

      -u  suid

      -g  sgid

      -k  sticky

    六、组合测试:

      [ EXPRESSION  -a  EXPRESSION]  并且(and)

      [ EXPRESSION  -o  EXPRESSION]  或者(or)

      [ !  EXPRESSION]           取反

      &&                 短路与。如果为真,则继续执行

      ||                    短路或。如果为假,则继续执行

      !                  取反

           例如:[ $[$RANDOM%6] -eq 0 ] && rm -rf / ||echo "luck"

    ():使用变量、命令是会有自己的shell,所以(exit)退出的()的shell。 |其实也是两边各有各自的shell

    {}:使用变量、命令是当前用户shell。

    故在脚本中,使用()中的exit不退出脚本shell。{}会退出脚本。所以用()可以做临时测试。

    例如临时脚本:

    #!/bin/bash 
                 ip=10.0.0.1
            ping -c1 -w1 $ip &> /dev/null  && echo "ip is up"||{ echo "ip is unreachable";exit;}
            echo "script is finished"

    不允许普通客户登陆:echo "Deny common user log > /etc/nologin"

    允许登陆:rm -rf /etc/nologin

    read:默认将变量放入$REPLYA。别于|联用,因为|也会生成各自的shell。   例如:echo "mage" |{ read name;echo $name;}; echo $mage 此命令结束后name并不是magedu

           test  -p "请输入xxx" name

    例如:鸡兔同笼脚本:

    #!/bin/bash
    #
    #*************************************************************
    #Author:                         ldy
    #QQ:                             8888888888
    #Date:                           2020-04-23
    #FileName:                       jitu_Problem.sh
    #URL:                            http://www.lidyeyuan.com
    #Description:                    The test script
    #Copyright (C):                  2020 All rights reserved
    #*************************************************************
    read -p "请输入头的数量:" head
    read -p "请输入脚的数量:" foot
    rabbit=$[ foot/2-head ]
    chook=$[ head-rabbit ]
    echo "兔子:$rabbit"
    echo "鸡:$chook"                                                                                                                                                          

    配置文件:

        全局配置:/etc/profile.d

                         /etc/profile

                         /etc/bashrc

        个人配置:~/bash_profile

          ~/.bashrc

    登陆:

      交互式:命令行终端登陆。

           su - username

                          配置文件执行顺序:/etc/profile>/etc/profile.d/*.sh>~/.bash_profile>~/.bashrc>/etc/bashrc

      非交互式:图形界面打开终端

           su username

           执行脚本

             任何其他bash实例

                        配置文件执行顺序:/etc/profile.d/*.sh>/etc/bashrc>~/.bashrc

    功能划分:profile类和bashrc类

      profile类:

        为交互式登陆的shell提供配置

           功能:定义环境变量

              运行命令或脚本

      bashrc类:

        为交互式和非交互登陆的shell提供配置

        功能:定义别名、函数

           定义本地变量

    修改这两类文件后需使之生效。

    ~/.bash_logout:但系统退出时,自动运行某些命令:如在里面添加rm -rf /data/test                  

  • 相关阅读:
    BZOJ 1565 植物大战僵尸
    BZOJ 1497 最大获利(最大权闭合子图)
    BZOJ 1070 修车(最小费用流)
    BZOJ 2879 NOI2012美食节
    PHPCMS模板里面使用自定义函数
    邓_phpcms_数据库
    邓_ phpcms_
    dedecms====phpcms 区别==[工作]
    邓_html_图片轮播
    dedecms_插件
  • 原文地址:https://www.cnblogs.com/ldyaly/p/12762901.html
Copyright © 2011-2022 走看看