shell基础之if语句
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语句的更多相关文章
- shell基础(七)-条件语句
条件语句在编写脚本经常遇到:用于处理逻辑问题. 一 IF 语句 if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句 ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
- Shell 基础知识和总结
调试脚本 检查脚本语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script shell里的变量 本地变量:只对当前shel ...
- linux base shell 基础语法
转载 本文主要是基础的基础,希望对大家有所帮助 一.Shell基本类型的变量: (1)Shell定义的环境变量: Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这 ...
- Shell基础入门
目录 Shell基础入门 1.什么是Shell? 2.Shell脚本的结构 3.Shell的变量 3.1.自定义环境变量 3.2.普通变量 3.3.位置参数变量 3.4.状态变量 4.条件测试和比较 ...
- 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配置文件 ...
随机推荐
- 一次使用IDEA中HTTP Client的经历
1 开端 HTTP Client是IDEA中自带的一个插件,用于代替原来的REST Client,打开Tools->HTTP Client->Test RESTful Web Servic ...
- LAMP架构上线动态网站WordPress
第一步,一键安装LAMP架构所需要的程序 yum install -y httpd mariadb-server php php-mysql 第二步,配置httpd,修改主配置文件/etc/httpd ...
- Go-14-解决 go get golang.org/x/text 拉取失败问题
现象 在执行go get -v github.com/spf13/cobra/cobra 时,报go get golang.org/x/text 拉取失败问题 解决方法: 在 ${gopath}/sr ...
- PyCharm调试程序
当我们在运行python程序出错时,我们需要定位到出错的位置.有时候通过程序运行时的报错可以很容易的找到出错的位置,但是有时候必须得通过调试程序才能找出我们的错误. PyCharm中要调试程序的话,在 ...
- Python脚本与Metasploit交互进行自动永恒之蓝攻击
我们首先利用 findTarget() 函数找到目标网段或目标主机中开放了445端口的主机,然后利用 confickerExploit() 函数将攻击代码写入 configure.rc 配置文件中,最 ...
- POJ2669不错的最大流 竞赛问题(枚举King的个数)
题意: 有n个人,任意两个人都比一次赛(一共比了n*(n-1)/2场),赢一场得到一分,最后的时候如果得分最高,或者是自己打败了所有比自己得分都高的人就算是King,给你每个人的最后得分, ...
- CVE-2012-3569:VMware OVF Tool 格式化字符串漏洞调试分析
0x01 简介 VMware OVF Tool 是一个命令行实用程序,允许您从许多 VMware 产品导入和导出 OVF 包.在 2.1.0 - 2.1.3 之间的版本中存在格式化字符串漏洞,通过修改 ...
- Win64 驱动内核编程-5.内核里操作文件
内核里操作文件 RING0 操作文件和 RING3 操作文件在流程上没什么大的区别,也是"获得文件句柄->读/写/删/改->关闭文件句柄"的模式.当然了,只能用内核 A ...
- 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火
神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...
- Day009 类和对象的创建
类和对象的关系 类是一种抽象的数据结构,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物 动物.植物.手机.电脑 Person类.Pet类.Car类等,这些都是用来描述/定义某一类具体的 ...