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