shell语法进阶

目录

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

没写完,实时更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值