目录
Shell传递参数
$特殊符号含义
示例:
Shell运算符
关系运算符
文件运算符
示例:
Shell 流程控制
if判断
格式:
示例:
结果:
for循环
格式:
示例:
结果:
while循环
格式:
示例:
结果:
function函数
函数中调用
外部调用
Shell应用示例
从1到用户输入的数字之间所有整数的和
代码
结果
99乘法表
代码
结果
一、Shell传递参数
$特殊符号含义
示例:
#!/bin/bash
echo "第一个参数是 $1"
echo "第二个参数是 $2"
echo "当前脚本返回状态是 $?"
echo "当前脚本名字是 $0"
echo "当前脚本共传递的参数是 $#个"
二、Shell运算符
关系运算符
-gt | 是否大于 |
-ge | 是否大于等于 |
-eq | 是否等于 |
-ne | 是否不等于 |
-lt | 是否小于 |
-le | 是否小于等于 |
文件运算符
-e或-a | 文件存在性测试,存在为真,否则为假 |
-f | 是否存在且为普通文件 |
-d | 否存在且为目录文件 |
-b | 是否存在且为块设备文件 |
-c | 是否存在且为字符设备文件 |
-s | 是否存在且为套接字文件 |
-p | 是否存在且为命名管道文件 |
-h/-l | 是否存在且为符号链接文件 |
示例:
#!/bin/bash
DIR="/opt/idss/data"
if [ -d $DIR ];then
echo "目录存在"
else
echo "目录不存在"
mkdir -p $DIR
if [ -d $DIR ];then
echo "创建'$DIR'完成"
fi
fi
FILENAME="/opt/idss/data/1.txt"
if [ -f $FILENAME ];then
echo "文件存在"
else
echo "文件不存在"
touch $FILENAME
if [ -f $FILENAME ];then
echo "创建'$FILENAME'完成"
fi
fi
三、Shell 流程控制
if判断
格式:
if [ 条件判断式 ]; then
# 当条件为真时执行的命令
else
# 当条件为假时执行的命令
fi
示例:
#!/bin/bash
a=1
b=2
if [ $a -ge $b ];then
echo "no"
else
echo "yes"
fi
结果:
for循环
格式:
for item in list; do
# 在每次迭代中执行的命令
done
示例:
#!/bin/bash
list=(a b c d)
for i in ${list[@]};do
echo $i
done
结果:
while循环
格式:
while [ 条件判断式 ]
do
# 循环体,执行相关操作
done
示例:
#!/bin/bash
count=0
while [ $count -lt 5 ]
do
echo "这是一个简单的while循环,当前计数:$count"
count=$((count+1))
done
#!/bin/bash
count=0
while true
do
echo "这是第 $count 次循环"
count=$((count+1))
if [ $count -gt 5 ]
then
break
fi
done
echo "循环结束"
结果:
四、function函数
函数中调用
function check(){ echo "" echo "" ... } check
执行check_server.sh脚本:
外部调用
函数的作用在其模块化,方便下次使用的时候,直接调用使用。所以在我们每次写脚本时,可以直接调用之前写好的函数,只需在使用前进行声明即可。
#!/bin/sh FILEPATH=`pwd` source $FILEPATH/check_server.sh check
执行调用脚本调用check_server.sh的check函数:
五、Shell应用示例
1、从1到用户输入的数字之间所有整数的和
代码
#!/bin/bash
read -p "Please input your number: " num
s=0
for ((i=1; i<=$num; i++))
do
s=$(($s+$i))
done
echo "The sum from 1 to $num is: $s"
结果
输入数字4 == 1+2+3=4
输入数字100 == 1+2+3=4+...100
2、99乘法表
代码
#!/bin/bash
for ((i=1; i<=9; i++))
do
for ((j=1; j<=i; j++))
do
let "result=i*j"
echo -n "$i * $j = $result "
done
echo "" # 换行
done
结果
3、配置免密
服务器列表文件:
[root@ph ~]# cat serverlist.txt
172.16.0.15
172.16.0.16
代码
#!/bin/bash
current=/root
serverlist=`cat $current/serverlist.txt`
mkdir -p /root/.ssh
ssh-keygen -t rsa -P ''
for ip in $serverlist
do
echo "$ip Need to configure password free."
scp /root/.ssh/id_rsa.pub root@$ip:/root/.ssh/authorized_keys
done
4、监控示例
监控内存发送邮件通知
#!/bin/bash
LOCAL_IP="192.168.159.128"
QQ_MAIL="963268595@qq.com"
#查询本机的剩余内存
FREE=$(free -h | grep -i "Mem" |awk '{print $4}')
if [[ $? -eq 0 ]];then
echo -e "开始发送邮件"
echo "$LOCAL_IP FREE IS $FREE" | mail -s "内存监控" $QQ_MAIL
if [[ $? -eq 0 ]];then
echo -e "Success send $QQ_MAIL "
fi
fi
监控CPU
#!/bin/bash
# 设置阈值,当CPU占用超过该阈值时进行输出提示
threshold=80
while true
do
# 使用top命令获取CPU占用信息,并使用grep和awk筛选和解析输出结果
cpu_usage=$(top -bn 1 | grep "%Cpu(s)" | awk '{print $2}')
# 将浮点数转换为整数,以便进行比较
cpu_usage=${cpu_usage%.*}
echo "Current CPU Usage: ${cpu_usage}%"
# 检查CPU占用是否超过阈值
if [ $cpu_usage -gt $threshold ]
then
echo "CPU Usage Exceeded Threshold!"
# 在此处添加其他操作或通知机制
fi
# 定义间隔时间,以控制检查频率
sleep 5
done
监控硬盘
#如果磁盘使用情况大于等于40% 则报警
#!/bin/bash
d=$(df -h | grep "/$" | awk '{print $5}' | awk -F% '{print $1}')
if [ $d -ge 40 ]
then
echo "需清理"
fi
没写完,实时更新