Shell流程控制

流程控制是改变程序运行顺序的指令。linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case)。下面我将通过例子介绍下,各个语句使用方法

if语句

格式:if list; then list; [ elif list; then list; ] ... [ else list; ] fi

1、单分支

if 条件表达式; then

命令

fi

2、双分支

if 条件表达式; then

  命令

else

  命令

fi

实例1判断crond进程是否正在运行

-v:表示取反;-c:即count,取代通常的输出,显示行数

1 #!/bin/bash
2 NAME=crond
3 NUM=$(ps aux |grep $NAME |grep -vc grep)
4 if [ $NUM -eq 1 ];then
5 echo "$NAME running."
6 else
7 echo "$NAME is not running!"
8 fi

实例2:检查主机是否在线

-c:表示发送几次包;-w:表示等待时间。当试图简写不可达主机时此选项很有用

1 #!/bin/bash
2 if ping -c 1 192.168.11.5 &>/dev/null;then
3 echo "OK"
4 else
5 echo "NO"
6 fi
1 #!/bin/bash
2 read -p "请输入您想检测的IP地址:" ip
3 ping -c 1 -w 1 $ip &>/dev/null
4 if [ $? -eq 0 ];then
5 echo "OK"
6 else
7 echo "NO"
8 fi

if 语句可以直接对命令状态进行判断,就省去了获取$?这一步!

如果我们不想让用户看到命令的执行结果,可以把执行结果追加到/dev/null文件中(黑洞文件)

3、多分支

if 条件表达式; then

  命令

elif 条件表达式; then

  命令

else

  命令

fi

当不确定条件符合哪一个时,就可以把已知条件判断写出来,做相应的处理。

实例:

$1:表示接受用户输入参数

 1 #!/bin/bash
2 N=$1
3 if [ $N -eq 3 ];then
4 echo "eq 3"
5 elif [ $N -eq 5 ];then
6 echo "eq 5"
7 elif [ $N -eq 8 ];then
8 echo "eq 8"
9 else
10 echo "no"
11 fi

[root@ren5 ~]# sh c.sh 3
eq 3

如果第一个条件符合就不再向下匹配

If语句实战案例

1、完成用户输入文件或者目录的自动复制,并可以实现用户指定复制目标位置;用户体验佳。

 1 #!/bin/bash
2 read -p "请输入你想复制的文件或目录:" file
3 if [ -f "$file" -o -d "$file" ];then
4 read -p "是否确定要复制该文件(y/n)" sure
5 confirm=$(echo ${sure} |tr A-Z a-z )
6 if [ "$confirm" == "y" ];then
7 read -p "请输入你要复制的位置:" place
8 if [ -d "$place" ];then
9 cp -a $file $place
10 echo "$file已经复制到$place。"
11 else
12 echo "$place位置不存在"
13 exit
14 fi
15 elif [ "$confirm" == "n" ];then
16 echo "再见"
17 else
18 echo "请输入y或n"
19 fi
20 else
21 echo "$file不存在"
22 fi

2、尝试写一个shell简单的计算器,实现加减乘除。

请输入一个数字: 7

请输入运算符:+

请输入第二个数字:7

7+7=14

 1 #!/bin/bash
2 read -p "请输入第一个数字:" NUM1
3 read -p "请输入运算符[+-*/]:" CHA
4 read -p "请输入第二个数字:" NUM2
5 if [ -n "$NUM1" -a -n "$CHA" -a -n "$NUM2" ];then
6 if [ "$CHA" == "+" ];then
7 echo "$NUM1+$NUM2=$(($NUM1+$NUM2))"
8 elif [ "$CHA" == "-" ];then
9 echo "$NUM1-$NUM2=$(($NUM1-$NUM2))"
10 elif [ "$CHA" == "*" ];then
11 echo "$NUM1*$NUM2=$(($NUM1*$NUM2))"
12 elif [ "$CHA" == "/" ];then
13 echo "$NUM1/$NUM2=$[$NUM1/$NUM2]"
14 else
15 echo "请输入[+-*/]"
16 fi
17 else
18 echo "请输入内容!"
19 fi
 1 #!/bin/bash
2 read -p "请输入第一个数字:" NUM1
3 read -p "请输入运算符[+-*/]:" CHA
4 read -p "请输入第二个数字:" NUM2
5 count () {
6 echo "${NUM1}${CHA}${NUM2}=$((${NUM1}${CHA}${NUM2}))"
7 }
8 error () {
9 echo "Usage:$0 {+|-|*|/}"
10 }
11 if [ -n "$NUM1" -a -n "$CHA" -a -n "$NUM2" ];then
12 if [ "$CHA" == "+" ];then
13 count
14 elif [ "$CHA" == "-" ];then
15 count
16 elif [ "$CHA" == "*" ];then
17 count
18 elif [ "$CHA" == "/" ];then
19 count
20 else
21 error
22 fi
23 else
24 echo "请输入内容!"
25 fi

3、输入一个用户,用脚本判断该用户是否存在。

1 #!/bin/bash
2 read -p "请输入用户名:" USER
3 TOF=$(cat /etc/passwd |awk -F: '{print $1}' |grep -w "$USER" -c)
4 if [ $TOF -eq 0 ];then
5 echo "该用户不存在"
6 else
7 echo "该用户存在"
8 fi

shell基础之if语句的更多相关文章

  1. shell基础(七)-条件语句

    条件语句在编写脚本经常遇到:用于处理逻辑问题. 一 IF 语句 if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句 ...

  2. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  3. shell基础及变量

    一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...

  4. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  5. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  6. Shell 基础知识和总结

    调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shel ...

  7. linux base shell 基础语法

    转载 本文主要是基础的基础,希望对大家有所帮助 一.Shell基本类型的变量: (1)Shell定义的环境变量: Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这 ...

  8. Shell基础入门

    目录 Shell基础入门 1.什么是Shell? 2.Shell脚本的结构 3.Shell的变量 3.1.自定义环境变量 3.2.普通变量 3.3.位置参数变量 3.4.状态变量 4.条件测试和比较 ...

  9. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

随机推荐

  1. BUAA_OS lab3 难点梳理

    BUAA_OS lab3 难点梳理 实验难点 进程创建 对于初始化部分,首先需要在pmap.c中修改mips_vm_init()函数,为envs开空间,并map到UENVS空间. 其次,模仿page_ ...

  2. Spring(一)简介和配置

    知识补充: 那么什么是xmlns呢?xmlns其实是XML Namespace的缩写,可译为"XML命名空间",但个人觉得,翻译后的名字反而不好理解,所以我们就叫它为XML Nam ...

  3. Java(299-314)【线程、同步】

    1.多线程的原理 2.多线程内存图解 开辟新的栈空间,多个线程之间互不影响 3.Thread类的常用方法 getName()返回该线程的名称 Thread类的子类 获取线程的名称:     1.使用T ...

  4. 【笔记】《Redis设计与实现》chapter16 Sentinel

    16.1 启动并初始化Sentinel 初始化服务器 Sentinel本质上只是运行在特殊模式下的Redis服务器,启动第一步就是初始化一个普通的Redis服务器 使用Sentinel专用代码 使用r ...

  5. Review: JQuery

    1.DOM access with jQuery 1 $("h1"); //select all the h1s 2 $("#heading"); // sel ...

  6. 02- Python的版本

    python的官网 https://www.python.org/ Python的版本 python  v2.7(2020结束维护) python  v.3.5(当前使用的版本) python  v3 ...

  7. 关于Spring Boot 多数据源的事务管理

    自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和"约定大于配置"的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spri ...

  8. sqlserver2018 报错恢复

    报错: Description: SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0xb2b1af16,但实际为: 0xac9393a2).在文件 'C:\Progr ...

  9. Linux日志分析和管理

    目录 日志的作用.分类.管理.轮转和级别 rsyslog服务 Journal守护进程 /var/log下相关的日志文件 日志服务器的建立 日志的作用.分类.管理.轮转和级别 日志的作用: 用于记录系统 ...

  10. linux ptrace学习

    ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪.学习linux的ptrace是为学习android adbi框 ...