默认会追加下一条命令的颜色
[root@localhost data]# echo -e '\033[31m 6666'
[root@localhost data]# echo -e '\033[31m 6666 \033[0m'
[root@localhost data]# echo -e '\033[42m \033[31m 6666 \033[0m'
[root@localhost data]# echo -e '\033[41m \033[33m 6666 \033[0m'
找出以根结尾的硬盘使用情况
[root@localhost data]# df -hT |grep /$
告诉你整个硬盘的分区情况
[root@localhost data]# fdisk -l
输出错误信息
[root@localhost ~]# ifconffig 2> /data/1.txt
[root@localhost ~]# cat /data/1.txt
bash: ifconffig: 未找到命令...
相似命令是: 'ifconfig'
过滤出IP地址
[root@localhost ~]# ifconfig ens33 |grep inet |grep -v inet6 |awk '{print $2}'
192.168.116.130
写个显示网络基本信息的脚本
#!/bin/bash
echo -e '\033[31m IP地址(IPADDR)\033[0m'
ifconfig ens33 |grep inet |grep -v inet6 |awk '{print $2}'
echo -e '\033[31m 子网掩码(NETMASK)\033[0m'
ifconfig ens33 |grep inet |grep -v inet6 |awk '{print $4}'
echo -e '\033[31m 路由(GETWAY) \033[0m'
route -n |grep UG |awk '{print $2}'
比如这里使用.分割来筛选出IP地址的第一段
[root@localhost data]# ifconfig ens33 |grep inet |grep -v inet6 |awk '{print $2}'|awk -F. '{print $1}'
[root@localhost data]# df -hT |grep /$|awk '{print $6}' |awk -F% '{print $1}'
#!/bin/bash
read -p "ip address:" IP
echo $IP
双引号会识别 符号,并读取 符号,并读取 符号,并读取号中变量的值
单引号不会识别,直接输出
[root@localhost data]# A1=chaitin
[root@localhost data]# A2=2023
[root@localhost data]# A3="$A1"+"$A2"+"Happy"
[root@localhost data]# echo $A3
chaitin+2023+Happy
[root@localhost data]# A3="$A1""$A2""Happy"
[root@localhost data]# echo $A3
chaitin2023Happy
[root@localhost data]# A3='$A1 $A2 Happy'
[root@localhost data]# echo $A3
$A1 $A2 Happy
[root@localhost data]# A4=`df -hT |grep /$`
[root@localhost data]# echo $A4
/dev/mapper/centos-root xfs 30G 6.5G 24G 22% /
[root@localhost data]# A5=$(ifconfig ens33 |grep inet |grep -v inet6)
[root@localhost data]# echo $A5
inet 192.168.116.133 netmask 255.255.255.0 broadcast 192.168.116.255
修改环境变量或者要进入子进程时要添加export
[root@localhost data]# export A6="wen"
[root@localhost data]# bash
[root@localhost data]# echo $A6
wen
普通变量在其他bash环境中无法执行,而全局变量能正常执行
注意乘号与正常的不同
设计一个小脚本
#!bin/bash
echo 开始 $0
tar zcf /data/test.tar.gz $*
echo 目录: $*
echo 个数: $#
&> /dev/null
#!/bin/bash
echo 开始 $0
tar zcf /data/test.tar.gz $* &> /dev/null
echo 目录: $*
echo 个数: $#
test=$?
#!/bin/bash
umount /dev/sr0
mount /dev/sr0 /media/
rm -rf /etc/yum.repos.d/*.repo
echo "[test-sh]" >> /etc/yum.repos.d/test.repo
echo "name=test" >> /etc/yum.repos.d/test.repo
echo "baseurl=file:///media" >> /etc/yum.repos.d/test.repo
echo "enabled=1" >> /etc/yum.repos.d/test.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/test.repo
yum clean all
yum makecache
#!/bin/bash
umount /dev/sr0
mount /dev/sr0 /media/
rm -rf /etc/yum.repos.d/*.repo
echo "[test-sh]" >> /etc/yum.repos.d/test.repo
echo "name=test" >> /etc/yum.repos.d/test.repo
echo "baseurl=file:///media" >> /etc/yum.repos.d/test.repo
echo "enabled=1" >> /etc/yum.repos.d/test.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/test.repo
yum clean all
yum makecache
read -p "IP网段:" NET
read -p "子网掩码:" NETMASK
read -p "DHCP起始地址:" RANG1
read -p "DHCP终止地址:" RANG2
read -p "DNS地址1:" DNS1
read -p "DNS地址2:" DNS2
read -p "网关:" GETEWAY
read -p "广播地址:" BROADCAST
echo "# A slightly different configuration for an internal subnet" > /etc/dhcp/dhcpd.conf
echo "subnet $NET netmask $NETMASK {" >> /etc/dhcp/dhcpd.conf
echo "range $RANG1 $RANG2;" >> /etc/dhcp/dhcpd.conf
echo "option domain-name-servers $DNS1,$DNS2;" >> /etc/dhcp/dhcpd.conf
echo 'option domain-name "internal.example.org";' >> /etc/dhcp/dhcpd.conf
echo "option routers $GETEWAY;" >> /etc/dhcp/dhcpd.conf
echo "option broadcast-address $BROADCAST;" >> /etc/dhcp/dhcpd.conf
echo "default-lease-time 600;" >> /etc/dhcp/dhcpd.conf
echo "max-lease-time 7200;" >> /etc/dhcp/dhcpd.conf
echo "}" >> /etc/dhcp/dhcpd.conf
systemctl start dhcpd
想要变量带上双引号,需要做嵌套
命令成立,返回值为0
[root@localhost data]# [ -e /etc/yum.repos.d/*.repo ]
[root@localhost data]# echo $?
0
[root@localhost data]#
if [ -e /etc/yum.repos.d/*.repo ]
then
echo 存在.repo结尾的文件
fi
if [ -e /etc/yum.repos.d/*.repo ]
then
echo 存在.repo结尾的文件
else 不存在.repo结尾的文件
fi
检查网络连通性
#!/bin/bash
net=`curl cip.cc -s|grep http |awk -F/ '{print $4}'` #使用反撇来让脚本执行命令;-s来取消统计信息
if [ $net -z ] &> /dev/null #判断命令是否执行成功,如果执行成功。返回值应该有东西
then
echo -e '\033[41m \033[33m 网络连接错误 \033[0m' #没有东西证明执行错误
else
echo -e '\033[42m \033[31m 网络连接正常,您的IP地址是:\033[0m' $net
fi
判断是否安装dhcp
rpm -q dhcp
echo $? #如果返回0,则证明安装成功
#!/bin/bash
read -p "请输入你的成绩:" A1
if [ $A1 -ge 85 ]
then
echo good!
elif [ $A1 -lt 85 ] && [ $A1 -ge 60 ]
then
echo 及格!
else
echo 不及格!
fi
#!/bin/bash
read -p "请输入您要判断的IP地址:" IP
echo $IP > /data/ipaddr
echo $IP |grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null
if [ $? -eq 0 ]
then
echo 000.000.000.000-999.999.999.999
else
echo -e '\033[31m ip address error \033[0m'
fi
#!/bin/bash
read -p "请输入您要判断的IP地址:" IP
echo $IP > /data/ipaddr
echo $IP |grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null
if [ $? -eq 0 ]
then
A=`awk -F. '{printf $1}' /data/ipaddr`
B=`awk -F. '{printf $2}' /data/ipaddr`
C=`awk -F. '{printf $3}' /data/ipaddr`
D=`awk -F. '{printf $4}' /data/ipaddr`
if [ $A -ge 1 ] && [ $A -le 255 ] && [ $B -ge 1 ] && [ $B -le 255 ] && [ $C -ge 1 ] && [ $C -le 255 ] && [ $D -ge 1 ] && [ $D -le 255 ]
then
if [ $A -ge 1 ] && [ $A -le 126 ]
then
echo -e '\033[42m \033[31m 该IP为A类地址!\033[0m'
elif [ $A -ge 128 ] && [ $A -le 191 ]
then
echo -e '\033[42m \033[31m 该IP为B类地址!\033[0m'
elif [ $A -ge 192 ] && [ $A -le 223 ]
then
echo -e '\033[42m \033[31m 该IP为C类地址!\033[0m'
else [ $A -ge 224 ] && [ $A -le 255 ]
echo -e '\033[42m \033[31m 该IP为D类地址!\033[0m'
fi
else
echo -e '\033[31m ip地址大于255不符合规定! \033[0m'
fi
else
echo -e '\033[31m ip地址不合法 \033[0m'
fi
~ ~
#!/bin/bash
i=1
while [ $i -le 100 ]
do
echo $i
let i++ #let也是用于计算的,对整数进行计算
done
#!/bin/bash
i=0
JG=`expr $RANDOM % 1000` #$random:产生一个随机值
while true
do
let i++
read -p "你猜的数字是:" INT
if [ $INT -eq $JG ]
then
echo -e '\033[42m \033[31m 恭喜你猜对了! \033[0m'
echo "你猜了"$i"次"
exit 0 #表示终止运行
elif [ $INT -gt $JG ]
then
echo "猜大了"
else
echo "猜小了"
fi
done
#!/bin/bash
for i in "httpd mysql dhcp samba"
do
rpm -e $i --nodeps & #--nodeps卸载时忽略依赖关系检查
done
~
#!/bin/bash
for i in 23 24 45 66
do
a1=$(expr $i % 2)
if [ $a1 -eq 1 ]
then
echo $i 为奇数
else
echo $i 为偶数
fi
done
~
^ :匹配开头(^h)
$ :匹配结尾(h$)
. :单个任意字符
* :匹配*左边的表达式0次或者多次
+ :匹配+左边的表达式1次或者多次
\ :使右侧正则符号失去含义,变为字符
[] : 范围选择匹配符,匹配的信息由中括号内的内容代替
[^]:反选
[a-z]:匹配小写a-z
[0-9]:匹配数字0-9
[A-Z]:匹配大写A-Z
^[a-zA-Z]:匹配开头是字母的
[a-z]$:以字母结尾
^[a-z]$:这一行都是小写字母
[|]"|":多个信息中匹配某一个
[-]"-":匹配一个范围
{}:匹配左侧表达式的个数,在shell中需要使用\来进行转义\{\}
{n} :
{n,} :
{n,m} :
\t :横向制表符,tab大空格
\n :换行符号![image.png](https://cdn.nlark.com/yuque/0/2023/png/22710349/1673671404177-8c360649-693d-4a69-988e-c124038b91b2.png#averageHue=%23bab4a1&clientId=uc1d24786-9cf4-4&from=paste&height=768&id=u03740001&originHeight=768&originWidth=1440&originalType=binary&ratio=1&rotation=0&showTitle=false&size=388883&status=done&style=none&taskId=u01085ad8-4c49-4e47-93c9-f15b69ad739&title=&width=1440)
-n :显示行号
-i :忽略大小写