一、条件判断表达式                                                         

条件测试类型:

  • 整数测试
  • 字符测试
  • 文件测试

条件测试的表达式

  [ expression ](注意expression头和尾部各有一个空格)

  [[ expression ]]

  test expression

算术运算有三种方法:

  • let 算术运算表达式
  • $[算术运算表达式]
  • $((算术运算表达式))
  • expr 算术运算表达式
[root@hao ~]# A=
[root@hao ~]#
B=
[root@hao ~]#
let C=$A+$B
[root@hao ~]# echo $C

[root@hao ~]#
D=$[$A+$B]
[root@hao ~]# echo $D

[root@hao ~]#
E=$(($A+$B))
[root@hao ~]# echo $E

[root@hao ~]#
F=`expr $A + $B`
[root@hao ~]# echo $F

1、整数测试:

  -eq:测试两个整数是否相等 $A -eq $ eB。

[root@hao ~]# A=
[root@hao ~]#
B=
[root@hao ~]#
[ $A -eq $B ]
[root@hao ~]# echo $?

  -ne:测试两个整数是否不等

  -gt:测试一个数是否大于另一个数

  -lt:小于

  -ge:大于等于

  -le:小于或等于

语句间的逻辑关系(短路操作)

  逻辑与、逻辑或

下面代码实现逻辑与,如果用户存在,则第一个语句为TRUE,则执行第二个语句。否则,若用户不存在,即第一个语句为false,则该逻辑与结果必为false,因此第二个语句就不会执行

[root@hao ~]# id user1 &> /dev/null && echo "hello,test true"
[root@hao ~]#
id hao &> /dev/null && echo "hello,test true"
hello,test true

(1)如果用户不存在,则添加用户(用逻辑与、逻辑或两种方法实现)

[root@hao ~]# id user2
id: user2: No such user
[root@hao ~]# id user2 &> /dev/null || useradd user2
[root@hao ~]# id user2
uid=(user2) gid=(user2) groups=(user2)
[root@hao ~]# id user3
id: user3: No such user
[root@hao ~]# ! id user3 &> /dev/null && useradd user3
[root@hao ~]# id user3
uid=(user3) gid=(user3) groups=(user3)

(2)如果一个文件的行数大于100,则显示该文件为大文件,否则显示为小文件

#!/bin/bash
LINES=$(wc -l /etc/inittab)
echo $LINES
FINLINES=`echo $LINES |cut -d' ' -f1`
echo $FINLINES
[ $FINLINES -gt ]&& echo "etc/inittab is a big file" || echo "etc/inittab is a small file"

执行结果为:

 /etc/inittab

etc/inittab is a small file

(3)如果用户存在,则显示该用户,如果用户不存在,则添加此用户

[root@hao ~]# id user1 && echo "user1 exits." || useradd user1
uid=(user1) gid=(user1) groups=(user1)
user1 exits.

(4)如果用户不存在,则添加用户并添加密码,如果存在,则显示用户已存在

[root@hao ~]# ! id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exits"
uid=(user1) gid=(user1) groups=(user1)
user1 exits

(5)给定一个用户,如果其UID为0,则显示为管理员,否则显示为普通用户

[root@hao ~]# nano third.sh
[root@hao ~]#
cat third.sh
#!/bin/bash
NAME=user1
USERID=`id -u $NAME`
[ $USERID -eq ] && echo "Admin" || echo "Common user".
[root@hao ~]# chmod +x third.sh
[root@hao ~]#
./third.sh
Common user.

 2、文件测试

  -e file :测试文件是否存在

  -f file :测试文件是否为普通文件

  -d file:测试指定路径是否为目录

  -r file:测试指定文件对当前用户是否可读

  -w file:测试指定文件对当前用户是否可写

  -x file:测试指定文件对当前用户是否可执行

(1)判断一个文件是否存在

#!bin /bash
FILE=/etc/inittab
if [ ! -e $FILE ]
then
echo "no file"
exit
fi

(2)给定一个文件,如果不存在,则退出脚本,如果存在且该文件为普通文件或者目录就显示之,否则,

#!/bin/bash
FILE=/etc/rc.d/rc.sysinit if [ ! -e $FILE ]
then
echo "no file"
exit
fi if [ -f $FILE ]
then
echo "common file"
elif [ -d $FILE ]
then
echo "directory"
else
echo "unknown"
fi

二、条件判断控制结构                                                    

1、单分支if语句:

if 判断条件

then

  statement1

  statement2

  ...

fi

2、双分支的if语句

if 判断语句

then

  statement1

  statement2

else

  statement3

  statement4

fi

3、多分支的if语句

if 判断条件1

then

  statement1

  ...

elif 判断条件2

then

  statement2

  ...

elif 判断条件3

then

  statement3

  ...

else

  statement4

  ...

fi

4、测试

(1)如果用户存在,输出用户存在,否则创建用户名和密码为用户名的密码。

[root@hao ~]# nano fourth.sh
[root@hao ~]#
cat fourth.sh
#!/bin/bash
NAME=user4
if id $NAME &> /dev/null
then
echo "$NAME exists"
else
useradd $NAME
echo $NAME | passwd --stdin $NAME &> /dev/null
echo "add user successful"
fi
[root@hao ~]#
chmod +x fourth.sh
[root@hao ~]#
./fourth.sh
add user successful
[root@hao ~]# ./fourth.sh
user4 exists

(2)判断一个用户是否是管理员

[root@hao ~]# nano fifth.sh
[root@hao ~]#
cat fifth.sh
#!/bin/bash
NAME=user1
if [ `id -u $NAME ` -eq ]
then
echo "Admin"
else
echo "Common"
fi
[root@hao ~]#
chmod +x fifth.sh
[root@hao ~]#
./fifth.sh
Common

(3)判断当前系统上是否有用户的默认shell为bash,如果有,就显示有多少个这类用户,否则,就显示没有这类用户

[root@hao ~]# nano sixth.sh
[root@hao ~]#
cat sixth.sh
#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq ]
then
USERS=`grep "\<bash$" /etc/passwd | wc -l`
echo "$USERS users has shell of bash"
else
echo "no such users"
fi
[root@hao ~]#
chmod +x sixth.sh
[root@hao ~]#
./sixth.sh
users has shell of bash

(4)上题基础上,如果存在上述用户,显示其中一个的用户名,否则显示没有此类用户

[root@hao ~]# nano seventh.sh
[root@hao ~]#
cat seventh.sh
#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null
RETVAL=$?
if [ $RETVAL -eq ]
then
AUSER=`grep "\<bash$" /etc/passwd | head - | cut -d: -f1`
USERS=`grep "\<bash$" /etc/passwd | wc -l`
echo "One of the $USERS is $AUSER" else
echo "no such users"
fi
[root@hao ~]#
chmod +x seventh.sh
[root@hao ~]#
./seventh.sh
One of the is root

(5)给定一个用户,判断其UID与GID是否一样,如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”

#!/bin/bash
USERNAME=user1
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME `
if [ $USERID-eq $GROUPID]
then
echo "good guy" else
echo "bad guy"
fi

 三、测试脚本                                                              

测试脚本是否有语法错误

bash -n file.sh

单步执行脚本

bash -x file.sh

四、定义退出状态码                                                       

exit:退出脚本

exit #

如果脚本没有明确定义退出状态吗,那么最后执行的一条命令的退出码即为脚本的退出码

  

《鸟哥的Linux私房菜》学习笔记(9)——条件判断的更多相关文章

  1. 鸟哥的linux私房菜学习笔记 __ 命令与文件的搜寻

    连续输入两次[tab]按键就能够知道使用者有多少命令可以下达.那你知不知道这些命令的完整档名放在哪里?举例来说,ls 这个常用的命令放在哪里呢? 就透过 which 或 type 来找寻吧! 范例一: ...

  2. 鸟哥的Linux私房菜学习笔记——文件权限与目录配置

    Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...

  3. 鸟哥的Linux私房菜学习笔记(1)

    2014/10/29 1.档案的权限管理分为三个部分: 拥有者.群组.其他 2.ls -al 命令可以看到档案的详细信息 3.档案的属性中由十个部分构成 第一个部分是档案类型 -代表档案.d代表文件夹 ...

  4. 【鸟哥的Linux私房菜】笔记1

    Linux是什么 从操作系统与cpu架构关系到linux  Richard Mathew Stallman GPL 关于GNU计划 Linux的发展 Linux的核心版本 Linux的特色 Linux ...

  5. 鸟哥的linux私房菜学习-(一)优缺点分析以及主机规划与磁盘分区

    一.linux的优缺点 那干嘛要使用Linux做为我们的主机系统呢?这是因为Linux有底下这些优点: 稳定的系统:Linux本来就是基于Unix概念而发展出来的操作系统,因此,Linux具有与Uni ...

  6. 【鸟哥的Linux私房菜】笔记2

    Linux的应用 学习资源整理 安装记录 >< 1.Linux的应用: 网络服务器 数据库 学术机构的高效运算任务 嵌入式系统 ... 2.挂载与磁盘分区 学习资源整理 学习 1.书上的网 ...

  7. 【鸟哥的Linux私房菜】笔记3

    正确地开机 最好不要使用root账号登陆!GNOME图形界面 View items as a list X WindowShell 文本交互界面bash是Shell的名称,Linux的默认壳程序就是b ...

  8. 《鸟哥的Linux私房菜》笔记——02. 关于Linux

    Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...

  9. 《鸟哥的Linux私房菜》笔记——03. 磁盘分区

    Everything is a file. 常见硬件对应于 Linux 下的文件(/dev目录下) 装置 装置在Linux内的档名 SCSI/SATA/U盘硬盘机 /dev/sd[a-p] U盘 /d ...

  10. 鸟哥的linux私房菜学习

    cat /etc/shells 系统拥有的shellcat /etc/passwd 记录用户使用的shell按两次 tab 键可显示所有可执行的指令alias 查看所有命令的别名alias lm='l ...

随机推荐

  1. hibernate自动建表技术_采用数据库反向生成技术

    1.首先使用oracle创建一个用户: 登陆sqlplus,并以sysdba登陆到数据库: 2.创建一个用户,并对此用户授予connect,resource两个角色的权限: 3.连接到hibernat ...

  2. 从零开始的全栈工程师——js篇2.4

    条件语句与循环语句 变量提升: 变量提升是浏览器的一个功能,在运行js代码之前,浏览器会给js一个全局作用域叫window ,window分两个模块,一个叫内存模块,一个叫运行模块,内存模块找到当前作 ...

  3. agc016B - Colorful Hats(智商题)

    题意 题目链接 有$n$个人,每个人有一种颜色,第$i$个人说除了我之外有$a_i$种不同的颜色,问是否存在一组合法解 Sol 700分的题就这么神仙了么..好难啊... 先说结论吧 设$mx, mn ...

  4. zabbix 监控项

    监控项 概述 监控项是从主机收集的数据信息. 配置主机后,你需要添加一些监控项以开始获取实际数据. 一个监控项是一个独立的指标.快速添加多个监控项的一种方法是将一个预定义的模板附加到主机.然而,为了优 ...

  5. python3应用例子01(进度条)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import sysimport time def bar(num, total): rate = num / ...

  6. 爬虫基础-http请求的基础知识

    百度百科上这么介绍爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 在开发爬虫时常用的工具:ch ...

  7. 在vue-cli中引入外部插件

    一.可以用npm下载的 现在以jquery为例子: 1 先在package.json中的dependencies中写入“jquery”:“^3.2.1”(jquery版本) 2 在npm中搜索jque ...

  8. pat乙级1059

    1.c++ 位数不够前面补零: printf("04d", i); 位数不够前面补空格(右对齐): printf("4d", i); 位数不够后面补空格(左对齐 ...

  9. Coursera 算法二 week 4 Boggle

    这次的作业主要用到了单词查找树和深度优先搜索. 1.在深度优先搜索中,在当前层的递归调用前,将marked数组标记为true.当递归调用返回到当前层时,应将marked数组标记为false.这样既可以 ...

  10. 最简单的基于FFMPEG的转码程序 —— 分析

    模块:  libavcodec    - 编码解码器         libavdevice   - 输入输出设备的支持         libavfilter   - 视音频滤镜支持         ...