IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Shell条件表达式 -> 正文阅读

[系统运维]Shell条件表达式

Shell条件表达式

条件表达式介绍

条件表达式,我们非常的常用,可以说,任何编程语言,都离不开条件表达式,但是每种变成语言的写法都不太一样,在shell中,有一种独特的写法。

条件测试语句

条件测试语句,我们又叫做test语句。

test: 条件测试
[]: 条件测试(语法:中括号两边一定要有空格)例:[ -f /etc/passwd ] 错误写法: [-f /etc/passwd]
[[]]: 支持正则(语法:中括号两边一定要有空格)

文件判断

-f: file 判断普通文件是否存在,如果存在则为真,如果不存在则为假
-d: directroy 判断目录是否存在,如果存在则为真,如果不存在则为假
-e: exists 判断是否存在,如果存在则为真,如果不存在则为假(不分文件还是目录)
-r: read 先判断文件是否存在,如果存在再判断是否有读权限,如果存在并且有读取权限则为真,否则为假(root用户永远有读取权限)
-w: write 先判断文件是否存在,如果存在再判断是否有写权限,如果存在并且有写权限则为真,否则为假(root用户永远有写权限)
-x: exec 先判断文件是否存在,如果存在再判断是否有执行权限,如果存在并且有执行权限则为真,否则为假
-s: size 先判断文件是否存在,如果存在再判断文件大小是否为0,如果是0则为假,如果大于0则为真(空文件为假,非空文件为真)
-L: link 先判断文件是否存在,如果存在再判断文件是否为软连接文件,如果是则为真,否则为假
-nt: newer than 判断文件是否较新,如果是则为真,否则为假
# [ simple_ip_host.sh -nt 01_position.sh ]
-ot: older than 判断文件是否较旧,如果是则为真,否则为假
# [ simple_ip_host.sh -ot 01_position.sh ]


## 做判断
[ -f /etc/zls.txt ] && echo '文件已存在' || echo '文件不存在'

[ -f /etc/passwd ] && {
  echo '文件已存在'
} || {
  echo '文件不存在'
  touch /etc/zls.txt
}

优化计算器

#!/bin/bash

num1=$1
num2=$2
[ $# -ne 2 ] && {
  echo '传递两个参数'
  exit 1
}

expr $num1 + $num2 &>/dev/null

[ $? -ne 0 ] && {
  echo '传递两个数字'
  exit 2
}

awk "BEGIN{print $num1+$num2}"
awk "BEGIN{print $num1-$num2}"
awk "BEGIN{print $num1*$num2}"
awk "BEGIN{print $num1/$num2}"

字符串表达式

注意:大写的注意,在shell脚本中所有变量的调用,请一定加上双引号,尤其是和字符串相关的,千言万语汇成一 句话"加双引号"如果让我看见你不加,那么你帽子颜色和加双引号一个颜色。

-n: not null 非空则成立
# name=zls
# [ -n "$name" ]
# age=
# [ -n "$age" ]

-z: null 空则成立

"str1" = "str2"
"str1" != "str2"
# name1=zls
# name2=cls
# [ "$name1" = "$name2" ]
# name2=zls
# [ "$name1" = "$name2" ]
# [ "$name1" = "$name2" ]
# [ "$name1" != "$name2" ]

整数表达式

-eq:equal 等于        =
-ne:not equal 不等于  !=
-gt:greater than 大于  >
-ge:greater than or equal 大于等于  >=
-lt:less than 小于     <
-le:less than or equal 小于等于     <=

两个中括号的成员运算(正则表达式)

#!/bin/bash

[ 1 = 1 ] && echo ok || echo not ok
[ 1 -eq 1 ] && echo ok || echo not ok
[ 1 -ge 1 ] && echo ok || echo not ok
[ 2 > 1 ] && echo ok || echo not ok

name=zls996

[[ "$name" =~ 'z' ]] && echo '在' || echo '不在'

[[ "$name" =~ [0-9] ]] && echo '有' || echo '没有'

## 优化计算器
cat 14_cal.sh
#!/bin/bash

num1=$1
num2=$2
[ $# -ne 2 ] && {
  echo '传递两个参数'
  exit 1
}

expr $num1 + $num2 &>/dev/null

[ $? -ne 0 ] && {
  echo '传递两个数字'
  exit 2
}

#可以这样写
float_int="^[-0-9]+$|^[-0-9]+\.[0-9]+$"
 
if [[ $num1 =~ $float_int && $num2 =~ $float_int ]];then
  awk "BEGIN{print $num1+$num2}"
  awk "BEGIN{print $num1-$num2}"
  awk "BEGIN{print $num1*$num2}"
  awk "BEGIN{print $num1/$num2}"
else
  echo '传递两个整数或者浮点数'
fi

#也可以这样写
float="^[-0-9]+\.[0-9]+$"
int="^[-0-9]+$"

if [[ $num1 =~ $float || $num1 =~ $int && $num2 =~ $float || $num2 =~ $int ]];then
  awk "BEGIN{print $num1+$num2}"
  awk "BEGIN{print $num1-$num2}"
  awk "BEGIN{print $num1*$num2}"
  awk "BEGIN{print $num1/$num2}"
else
  echo '传递两个整数或者浮点数'
fi

[ 条件1 -a 条件2 ] 两个条件都满足
[[ 条件1 && 条件2 ]] 两个条件都满足

[ 条件1 -o 条件2 ] 两个条件满足一个即可
[[ 条件1 || 条件2 ]] 两个条件满足一个即可

企业面试题

面试题1

命令行中输入一个数字,如果数字是1,则输出1,如果是2则输出2,既不是1也不是2则显示脚本使用方法,并退出 程序

# vim
[ $# -eq 1 ] || {
  echo "Usage: $0 {1|2}"
  exit 1
}

[ $1 -eq 1 -o $1 -eq 2 ] && echo "$1" || echo "Usage: $0 {1|2}"

[ $1 -ne 1 -a $1 -ne 2 ] && echo "Usage: $0 {1|2}" || echo "$1"

面试题2

使用read进行传参,实现两个整数比较大小,并将大的数字打印到屏幕上。

#!/bin/bash

read -p 'Pls Input Two Numbers: ' num1 num2
[ $num1 -gt $num2 ] && echo $num1 || echo $num2


#!/bin/bash

read -p 'Pls Input Two Numbers: ' num1 num2
#[ $num1 -gt $num2 ] && echo $num1 || echo $num2
[[ $num1>$num2 ]] && echo $num1 || echo $num2

作业

1.写一个登录框(必做)

#1.用户登录界面
用户名:
密码:
判断:
1)用户是否存在
2)如果存在,密码是否正确
3)如果存在并且密码正确,登录成功
4)如果用户不存在,进入注册界面
5)注册界面:
注册名:
注册密码:
确认密码:
6)注册完成后再返回登录页面
#!/bin/bash
. /etc/init.d/functions

read  -p '请输入登录用户: ' x

grep -w "$x" ./backup.txt >/dev/null
if [ $? -eq 0 ]; then 
  read  -p '请输入登录密码: '  y
  grep -w "$y" ./backup.txt >/dev/null
  if [ $? -eq 0 ]; then
       action "$x登录成功" /bin/true
exit 156
  else
      action "用户密码错误" /bin/false
  fi
else
  read  -p '没有这个用户,是否创建用户yes或no: ' create_user
fi

if [ $create_user = yes ]; then
    read -p '请注册用户名: ' user1
    read -p '请输入注册的密码: ' passwd1
    read -p '再次确认密码: ' passwd2
   if [ $passwd1 = $passwd2 ];then
	grep -w "$user1" ./backup.txt >/dev/null
      if [ $? -eq 0 ];then
	echo "已有$user1用户"
     else
     echo "$user1 $passwd1" >> ./backup.txt
     fi
   else
     echo '密码错误'
     exit 125
   fi
else
	echo '告辞'
fi

2.多选题(选做)

请选择你心仪对象的条件:
A: 女 B:身材好 C:有钱 D:脸蛋好
请输入对象条件:A
你选择的对象条件是 : 脸蛋好 身材好
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:11:03  更:2021-09-09 12:13:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 2:50:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码