shell之条件&&逻辑语句

1.条件测试

注: [ ]  方框  表示 条件框

1.1字符串比较

  • [root@svr5 ~]# [ $USER == "root" ]         #测试 比较父shell 的环境变量USER 是否等于root
  • [root@svr5 ~]# echo $?                    #查看结果0为对,非0为错

 变量是否为空

  • [ "$c" == abc ]     #如果变量为空,有可能报错,加双引号可以避免
  • [ -z $c ]         #判断变量是否为空
  • [ ! -z $c ]        #判断变量是否非空
  • 还有一个-n可以测试变量是否不为空(相当于! -z)。

案例: 只能root可以创建用户脚本(用source执行)

vim /opt/test05.sh  //编辑脚本


#!/bin/bas
echo $USER
[ $USER != root ] && echo "Non-administrators are prohibited from performing this operation!!!" && exit
read -p "pleas input username:" u
useradd $u
stty -echo
read -p "Pleas input passwd:" n
stty echo
echo $n | passwd --stdin $u


. /opt/test05.sh  // 运行脚本 

在root环境下可以进行添加用户,非root错误提示并退出

 注:使用bash /opt/test05.sh 后 无法执行exit命令,而source/. 可以执行exit操作

分析:由于bash 进入了子shell,不会对当前环境变量产生影响.

1.2逻辑组合

#  命令A && 命令B    //A真B行

 # A || B                 //A假B行

 # A ; B                         //A行B行,互不干扰.

可以结合  命令A  逻辑符号(&&/||)  echo "true"  输出是否命题结果

1.3数值比较

eq 等于   ne不等   gt大于   lt小于   ge大于等于   le小于等于

[root@nsd2312 ~]# X=20
[root@nsd2312 ~]# [ $X -eq 20 ] && echo "yes" || echo "no"
yes
[root@nsd2312 ~]# [ $X -ne 20 ] && echo "yes" || echo "no"
no
[root@nsd2312 ~]# [ $X -gt 20 ] && echo "yes" || echo "no"
no
[root@nsd2312 ~]# [ $X -lt 20 ] && echo "yes" || echo "no"
no
[root@nsd2312 ~]# [ $X -ge 20 ] && echo "yes" || echo "no"
yes
[root@nsd2312 ~]# [ $X -le 20 ] && echo "yes" || echo "no"
yes

1.4识别文件/目录的状态

[ -?   "路径"]  && echo 'true' || echo 'no'

选项-e:判断对象是否存在

        =d 判断对象是否为目录

        -f判断对象是否为文件

        -r 判断对象是否可写

        -x判断对象是否有x有x权限

 注意: -r 和-w对root无效

2.if选择结构

if单分支

  • if 条件测试 ; then
  • 命令序列
  • fi

if双分支

  • if 条件测试;then
  • 命令序列1
  • else
  • 命令序列2
  • fi

if多分支

  • if 条件测试1 ;then
  • 命令序列1
  • elif 条件测试2 ;then
  • 命令序列2
  • else
  • 命令序列n
  • fi

 介绍新成员:黑洞 文件路径 /dev/null

用于重定向抛件

3.for循环结构

for i in 范围

do

命令序列

done


范围表示有:

        {1..10} 

        [1,2,4]

或者

`seq 10`

递减:

`seq 10 | tac`


有c语言的味道:

  • #!/bin/bash
  • for ((i=1;i<=5;i++))
  • do
  • echo $i
  • done

4.while循环结构

  • while 条件测试 #根据条件的结果决定是否要执行任务,条件测试成功的话就执行,如果失败立刻结束循环
  • do
  • 命令序列
  • done

 无限true循环:

while :#冒号实现一直true

do

sleep 0.1   #休息0.1s 

done

循环控制语句:

exit

break

continue

温馨提示:偷个小赖 ,不用说你也知道怎么用

5.case用法

case  值  in 

目的1)

命令1;;

目的2)

命令n;;

*)

命令  #后面可不写;;

esac

注:修改vim的缩进格式(通过Tab键)  配置文件.vimrc

配置文件路径: vim ~/.vimrc 

set ai

set ts=4

 注: Vim  区分  Vi

Vim 是Vi 的扩展,拥有Vi所没有的功能特征

在配置文件/编程脚本,用vim

 

 

 

 

 

 

你可能感兴趣的:(linux,服务器,运维)