计算机基础篇之五

目录

  1.bash变量类型

  2.条件的测试类型

  3.if语句

  4.SHELL算术运算表达式

1.bash变量类型

1)环境变量
2)本地变量(局部变量)
3)位置变量
4)特殊变量(内置的系统变量)
1】本地变量:作用域为整个bash进程
###示例###
[root@xiaofu ~]# NAME=1
[root@xiaofu ~]# echo $NAME
1
[root@xiaofu ~]# bash        #子bash并不继承父bash的变量
###引用变量的方式###
echo ${变量名}    #{}可以省略
[root@xiaofu ~]# echo $NAME

[root@xiaofu ~]# 
【2】环境变量:作用域为当前bash进程及其子进程
###示例1###
[root@xiaofu ~]# export XIAOFU=2
[root@xiaofu ~]# echo $XIAOFU
2
[root@xiaofu ~]# bash
[root@xiaofu ~]# ps
   PID TTY          TIME CMD
 13318 pts/1    00:00:00 bash
 13354 pts/1    00:00:00 bash
 13365 pts/1    00:00:00 ps
[root@xiaofu ~]# echo ${XIAOFU}     #子bash进程依然继承父bash进程的环境变量
2
[root@xiaofu ~]# 
###示例2###
[root@xiaofu ~]# XIAOFU=3
[root@xiaofu ~]# export XIAOFU
[root@xiaofu ~]# bash
[root@xiaofu ~]# ps
   PID TTY          TIME CMD
 13318 pts/1    00:00:00 bash
 13354 pts/1    00:00:00 bash
 13367 pts/1    00:00:00 bash
 13378 pts/1    00:00:00 ps
[root@xiaofu ~]# echo $XIAOFU
3
[root@xiaofu ~]# 
###解释说明###
脚本在执行时会启动一个子shell进程
    命令行中启动的脚本会继承当前shell环境变量
    系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
【位置变量】如:$1,$2,$#(参数的个数),$*/$@(参数列表)
【特殊变量】如:$?,$#,...
###示例###
$?   #保存上一个命令执行状态返回值
    ###注释###
            程序执行后,可能有两种值
                    1)程序的执行结果
                    2)程序状态返回代码,范围是0-255
                                #"0"表示正确执行
                                #"1-255"表示错误执行,其中"1","2","127"是系统预留
###示例###
[root@xiaofu ~]# tail -1 /etc/passwd
zs:x:1000:1000:zs:/home/zs:/bin/bash
[root@xiaofu ~]# echo $?
0
[root@xiaofu ~]# tail -1 /etc/passwd1
tail: cannot open ‘/etc/passwd1’ for reading: No such file or directory
[root@xiaofu ~]# echo $?
1
###查看当前SHELL中的所有变量###:set
###撤销变量###:unset 变量名
###查看当前SHELL的环境变量###:printenv,env,export

2.条件的测试类型

1】整数测试
【2】字符串测试
【3】文件测试
###条件测试的表达式###
1)[  表达式  ]          #"表达式前后有空格,否则语法错误"
2)[[  表达式  ]]       # 同上
3)test 表达式
#################################################
【整数比较】
    -eq  等于
    -ne  不等于
    -gt   大于
    -lt     小于
    -ge   大于等于
    -le    小于等于
###逻辑运算符###
    逻辑与:一个为假,一定为假,bash用"&&"表示
    逻辑或:一个为真,一定为真,bash用"||"来表示
    逻辑非:!真=假                  bash用"!"表示
    逻辑异或:只有两个值都为真则为假(0)
###示例1###
[root@xiaofu home]# id zs &> /dev/null && useradd zs
[root@xiaofu home]# id zs  #当前系统没有"zs"的用户【逻辑与】
id: zs: no such user
[root@xiaofu home]# id zs &> /dev/null || useradd zs   #当前系统没有"zs"用户【逻辑或】
[root@xiaofu home]# id zs
uid=1000(zs) gid=1000(zs) groups=1000(zs)
[root@xiaofu home]#
###示例2###
#!/bin/bash
# example of create user01...
#如果用户存在,显示已存在,并更改密码,否则添加用户,设置密码
#id user01 &> /dev/null && echo "user01已存在并更改密码" && echo "user01" | passwd --stdin user01 &>/dev/null || useradd user01 || echo "user01" | passwd --stdin user01 &> /dev/null
#如果不存在,就添加并设置密码,否则显示已存在
! id user01 &> /dev/null && useradd user01 && echo "user01" | passwd --stdin "user01" &> /dev/null && echo "新建用户并设>置密码成功"|| echo "已存在"
文件测试参数
[ -f ]测试文件是否为普通文件
[ -d ] 测试指定路径是否为目录
[ -e ] 测试文件是否存在
[ -r/wx ] 测试当前用户对指定文件是否有都/写/执行权限
[ = ] 比较字符串内容是否相同
[ != ] 比较字符串内容是否不同
[ -z ] 判断字符串内容是否为空

3.if语句

【单分支】
    if 判断条件;then
        语句1...   #不要求缩进,但是建议有缩进
        语句2...
    fi
【双分支语句】
    if 判断条件;then
        语句1...
        语句2...
    else
        语句3...
        语句4...
    fi
【多分支语句】
  if 判断条件1;then
    语句1
    ...
  elif
    语句2
    ...
  ...
  else
    语句3
    ...
  fi

###示例"单分支"### #!/bin/bash # example of if单分支... NAME=user01 if id $NAME &> /dev/null;then echo "$NAME 已经存在" fi ###示例"双分支"###
###示例1### #
!/bin/bash # example of if双分支... NAME=user01 if id $NAME &> /dev/null;then echo "$NAME 已经存在" else useradd $NAME && echo "user01" | passwd --stdin user01 &> /dev/null && echo "添加用户成功" fi
###示例2###

[root@python sh]# cat bash用户.sh
#!/bin/bash
#"查看当前shell中有多少个默认shell是bash"
grep "\<bash$" /etc/passwd &> /dev/null
RET=$?


if [ $RET -eq 0 ];then
USERS=`grep "\<bash$" /etc/passwd | wc -l`
# AUSER=`grep "\<bash$" /etc/passwd | head -1 | cut -d: -f1`
echo "有$USERS个bash的用户"
else
echo "Nothing"
fi

###示例3###

[root@python sh]# cat file1.sh
#!/bin/bash
#给定一个文件,如果是一个文件,就显示,如果时目录,也显示,否则,此为非法文件
FILE=/etc/fstab

if [ ! -e $FILE ];then
echo "无此文件"
exit 2     #退出此脚本,如果没指定"exit"则脚本按照最后一次输入的命令进行判断,数字可自定义,0为正确执行,1-255为错误执行
fi

if [ -f $FILE ];then
echo "普通文件"
elif [ -d $FILE ];then
echo "目录"
else
echo "无法识别此文件"
fi
###示例4###

[root@python sh]# cat time.sh
#!/bin/bash
#指定用户“user01”获取其密码警告期限,判断密码使用期限是否小于警告期限,如果小于则显示"Warning",否则显示"OK"
W=`grep "user01" /etc/shadow | cut -d: -f6`
S=`date +%s`
T=`expr $S/86400`
L=`grep "user01" /etc/shadow | cut -d: -f5`
N=`grep "user01" /etc/shadow | cut -d: -f3`
SY=$[ $L-$[$T-$N] ]

if [ $SY -lt $W ];then
echo "Waring"
else
echo "OK"
fi
###示例5###

[root@python sh]# cat cacl.sh
#!/bin/bash
#给脚本两个参数,显示参数之和及相乘
if [ $# -lt 2 ];then
echo "ERROR"
exit 2
fi
echo "参数之和is:$[$1+$2]"
echo "参数相乘is:$[$1*$2]

4.SHELL算术运算表达式

###示例###
[root@python sh]# a=1
[root@python sh]# b=2
###示例方式1###
[root@python sh]# let c=$a+$b
[root@python sh]# echo $c
3
###示例方式2###
[root@python sh]# d=$[$a+$b]
[root@python sh]# echo $d
3
###示例方式3###
[root@python sh]# e=$(($a+$b))
[root@python sh]# echo $e
3
###示例方式4###
[root@python sh]# h=`expr $a + $b`
[root@python sh]# echo $h
3

THE END

posted @ 2020-01-27 17:42  xiaofu89120  阅读(139)  评论(0)    收藏  举报