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

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

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的名称,如basht插入Tab键f换行,但光标仍停留在原处 表示插入""本身b表示退格 不显示钱一个字符 五,循环语句echo命令 选项作用n输出换行r光标移至行首,并且不换行s当前shell的名称,如basht插入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< 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5068964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存