目录
一,条件语句
1.1条件测试test
1.2文件测试
二,整数测试
1.1整数值比较
1.2常用的测试 *** 作符
三,字符串测试
1.字符串比较
2,常用的测试 *** 作符
四,逻辑测试
1基本格式
2常用的测试 *** 作符
五,循环语句echo命令
六,for
七,while和until
八,菜单
一,条件语句 1.1条件测试test
test测试文件的表达式是否成立,当条件成立时候,返回值为0,其余时间为非0值。
格式1:test 条件表达式 格式2:[ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)1.2文件测试
文件测试基本格式为:
[ *** 作符 文件或目录 ] (注意两端要有空格) &? 返回0表示条件成立,返回非零值表示条件不成立 && 逻辑与,"而且"的意思 || 逻辑或,"或者"的意思
常见的测试 *** 作符
解释:条件测试在判断某需求是否满足要求时,需要由测试机制来实现,测试过程中,实现评估布尔声明,以便于在条件性环境进行执行,若为真,则状态码变量$?返回0,若为假,则状态码变量$?返回1(或者不等于0的数)。
举例:
[root@localhost ~]# test -f 1.txt #此处如果不想写[]可以输入test [root@localhost ~]# echo $? 1 #因为等于1,所以执行为错误 [root@localhost ~]# [ -f 1.txt ] [root@localhost ~]# echo $? 1 #由于未创建1.txt的文件所以失败 [root@localhost ~]# touch 1.txt [root@localhost ~]# [ -f 1.txt ] #一定要注意前后空格!!!!! [root@localhost ~]# echo $? 0 #此处为正确演示
[root@localhost ~]# test -e yanshi.sh &&echo "yes" yes [root@localhost ~]# 此处&&表示为前面测试该文件是否存在,如果存在输出yes(此处不验证脚本的正确性)
有一个特别注意的地方:
此处没有任何权限但是显示为0
[root@localhost ~]# ll /etc/shadow ----------. 1 root root 1192 10月 26 08:30 /etc/shadow [root@localhost ~]# [ -r /etc/shadow ] [root@localhost ~]# echo $? 0二,整数测试 1.1整数值比较
命令基本格式 [ 整数1 *** 作符 整数2 ]1.2常用的测试 *** 作符
-eq
等于(Equal)常用的格式:
格式一:[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ] 格式二:[ -z 字符串 ]2,常用的测试 *** 作符
格式一: [ 表达式1 ] *** 作符 [ 表达式2 ] ... 格式二: 命令1 *** 作符 命令2 ...2常用的测试 *** 作符
注意:&&符号不可以在一个[]中使用,但是可以在两个[]之间使用
小脚本:ping
-c:发送包的个数
-i :发送的间隔时间
-W :超时时间
-w :多少秒后停止ping *** 作
五,分支结构
单分支
if 判断条件; then 条件为真的分支代码 fi
双分支
if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi
多分支
if 判断条件1; then 条件1为真的分支代码 elif 判断条件2; then 条件2为真的分支代码 elif 判断条件3; then 条件3为真的分支代码 ... else 以上条件都为假的分支代码 fi
.1case
格式:
case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) 默认分支 ;; esac
注意:case支持glob风格的通配符:
* 任意长度任意字符
? 任意单个字符
[] 指定范围内的任意单个字符
| 或者,如: a|b
查看当前系统时间date
循环含义:
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件重复运行次数
循环次数事先已知
循环次数事先未知
六,for执行机制,便利
执行机制:一次将列表中的元素复制给“变量名”;每次赋值后即执行一次循环体;知道列表中的元素耗尽,循环结束。
如果省略[inWORDS...],此时使用位置变量 in “%$”
$RANDOM 取值范围:0-32767
七,while和until相对于for,需要知道循环次数
我们只知道停止条件,不知道次数,就需要使用while
直到达到条件
while 当命令判断为假时停止 until 当命令判断为真时停止
双重循环及跳出循环
break跳出单个循环后面加数字2则代表跳出两层循环
continue终止某次循环中的命令,但是不会完全终止命令
八,菜单#!/bin/bash PS3="请选择1-11号菜单" menu=" 进行yum安装 关闭sellinux 判断用户是否为root用户 基本信息 磁盘分区 alias 重启网卡 关闭软件" select menu in $menu do case $REPLY in 1) mount /dev/sr0 /mnt &>/null cd /etc/yum.repos.d mkdir bak mv *.repo bak touch lgy.repo echo -e " [centos7] name=centos7 baseurl=file:///mnt gpgcheck=0 enabled=1">lgy.repo yum clean all yum install -y tree ;; 2) echo “$menu” setenforce 0 ;; 3) if [ `whoami` = "root" ]; then echo "root用户" else echo “非root用户” fi ;; 4) name=`hostname` ip=`ifconfig ens33 |awk /netmask/'{print $2}'` os=`cat /etc/redhat-release` kernel=`uname -r` cpu=`lscpu |grep 型号名称:|tr -s " "|cut -d":" -f2` mem=`free -hm |awk /Mem/'{print $2}'` space=`lsblk |awk /disk/'{print $4}' |awk -F G '{print $1}'` G="e[1;32m" B="e[1;34m" E="e[0m" for i in $space do let sum=$[$sum+$i] done echo -e "$B主机名:$E$Gt$namet$E" echo -e "${B}IP地址:$E$Gt$ipt$E" echo -e "$B系统版本:$E$Gt$ost$E" echo -e "$B内核版本:$E$Gt$kernelt$E" echo -e "${B}cpu名称:$E$Gt$cput$E" echo -e "$B内存总大小$E:$Gt$memt$E" echo -e "$B硬盘总大小$E:$Gt${sum}Gt$E" ;; 5) echo "- - -"> /sys/class/scsi_host/host0/scan echo "- - -"> /sys/class/scsi_host/host1/scan echo "- - -"> /sys/class/scsi_host/host2/scan fdisk /dev/sdb<欢迎分享,转载请注明来源:内存溢出
评论列表(0条)