栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

shell脚本一看就会,学习无压力

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shell脚本一看就会,学习无压力

目录

一,条件语句

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表示条件成立,返回非零值表示条件不成立
&&  逻辑与,"而且"的意思
||  逻辑或,"或者"的意思

常见的测试操作符

操作符解释
-d测试是否为目录
-e测试目录或文件是否存在
-a测试目录或文件是否存在
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限读取
-L测试是否为软连接文件

解释:条件测试在判断某需求是否满足要求时,需要由测试机制来实现,测试过程中,实现评估布尔声明,以便于在条件性环境进行执行,若为真,则状态码变量$?返回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)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

三,字符串测试

1.字符串比较

常用的格式:

格式一:[ 字符串1 = 字符串2 ]
	   [ 字符串1 != 字符串2 ]
格式二:[ -z 字符串 ]

2,常用的测试操作符
常用的测试操作符解释
=第一个字符串和第二个字符串内容相同
!=第一个字符串和第二个字符串内容不相同,!表示相反的意思
-z检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串
-n检测字符串是否存在

四,逻辑测试

1基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...

2常用的测试操作符
常用的测试操作符解释
&&逻辑与,“而且”的意思,使用test命令时,可以将&&改为“-a”
||逻辑或,“或者”的意思,使用test命令时,可以将||改为“-o”
逻辑否

注意:&&符号不可以在一个[]中使用,但是可以在两个[]之间使用

小脚本: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

n输出换行
r光标移至行首,并且不换行
s当前shell的名称,如bash
t插入Tab键
f换行,但光标仍停留在原处
表示插入""本身
b表示退格 不显示钱一个字符

五,循环语句echo命令
选项作用
n输出换行
r光标移至行首,并且不换行
s当前shell的名称,如bash
t插入Tab键
f换行,但光标仍停留在原处
表示插入""本身
b表示退格 不显示钱一个字符
c抑制更多的输出或不换行

查看当前系统时间date

-d你描述的日期,显示指定字符串所描述的时间,而非当前时间
%F完整日期格式,等价于%Y-%m-%d
%T时间(24小时制)(hh:mm:ss)

循环含义:

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件重复运行次数

循环次数事先已知

循环次数事先未知

六,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< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号