当前位置: 首页 > article >正文

shell练习

开篇小贴士:为创建的sh(当然可以是任何一个文件)文件添加开头的注释

1、进入到家目录,然后通过 ls -a 查看全部文件

2、找到并编辑一个名为 .vimrc (Vim编辑器的核心配置文件)的配置文件,下图是添加的一个示例(我目前的注释)

在该配置文件中还可以修改字体、颜色主题、窗口布局等,具体文献参考如下:

vim设置新建文件自动填入的文件头(作者信息等)、设置编辑时间、鼠标直接定位_linux 创建文件时自动填写信息-CSDN博客

ping主机测试,查看主机是否存活

创建一个shell脚本以sh结尾即可,通过bash xx.sh来运行(以下均相同,不再赘述)

注:这里直接通过bash xx.sh 来运行的话必须要在当前位置下有这个文件,不然后面应该是路径

#########################
#File name:1.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:07:06
#Description:
#########################
echo "ping主机测试,查看主机是否存活" 
read -p "请输入一个需要测试的ip地址:" ipadd
ping -c 1 "$ipadd" > /dev/null
if [ $? -eq 0 ]; then
        echo "该ip地址目前存活......"
else
        echo "该ip地址已断开连接......"
fi


判断一个用户是否存在

#!/bin/bash
#########################
#File name:2.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:23:56
#Description:
#########################
echo "判断一个用户是否存在"
read -p "请输入一个需要查看是否存在的用户名:" username
if [ $username == "root" ]; then
        echo "请输入除root用户外的用户!!!" && exit
else
        ls  /home | grep $username > /dev/null

        if [ $? -eq 0 ]; then
                echo "$username用户是存在的"
        else
                echo "$username用户不存在的"
        fi
fi


判断当前内核主版本是否为3,且次版本是否大于10

#!/bin/bash
#########################
#File name:3.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:35:35
#Description:
#########################
echo "判断当前内核主版本是否为3,且次版本是否大于10"
main=$(uname -r | cut -d'.' -f1)
if [[ $main -eq 3 ]]; then
        echo "当前内核主版本为3"
else
        echo "当前内核版本不为3"
fi

sub=$(uname -r | cut -d'.' -f2)
if [[ $sub -gt 10 ]]; then
        echo "当前内核次版本大于10"
elif [[ $sub -lt 10 ]]; then
        echo "当前内核次版本小于10"
else 
        echo "当前内核次版本等于10"
fi


判断nginx是否运行;如果没有,则运行它,并且开机启动

#!/bin/bash
#########################
#File name:4.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 19:52:15
#Description:
#########################
echo "判断nginx是否运行;如果没有,则运行它,并且开机启动"
read -p "请输入想要查看的服务名:" service_name
is_open=$(systemctl is-active $service_name | grep n)
if ! [[ $is_open -eq 0 ]]; then
        echo "$service_name服务是没有启动的,下面我将进行一个运行并开启开机启动的操作......"
        systemctl start $service_name
        systemctl enable $service_name

else
        echo "$service_name服务是开启的......"
        auto_open=$(systemctl is-enabled $service_name)
        if [[ $auto_open -eq 0 ]]; then
                read -p "当前服务没有开启开机自动开启,是否需要开启(请输入y/n):" -n 1 is_auto_open
                echo
                for ((flag=1; flag<=3; flag++));do
                        if [[ "$is_auto_open" == "y" || "$is_auto_open" == "n" ]]; then
                                break
                        fi
                        echo "请输入y/n!!!"
                done

                if [[ "$is_auto_open" == "y" ]]; then
                        systemctl enable $service_name > /dev/null
                        echo "当前服务的开机自启动已开启"
                elif [[ "$is_auto_open" != "n" ]]; then 
                        echo "不按照我的来就不让你操作了!!!" 

                fi
        else
                echo "当前服务开启了开机自动开启服务......"
        fi
fi


判断指定的主机是否能ping通,必须使用$1变量

#!/bin/bash
#########################
#File name:5.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-24 20:57:48
#Description:
#########################
echo '判断指定的主机是否能ping通,必须使用$1变量'
echo

ping -c 1 $1 > /dev/null
if [ $? -eq 0 ]; then
        echo "该ip地址目前存活......"
else
        echo "该ip地址已断开连接......"
fi


完成一个报警脚本

要求如下:
        根分区剩余空间小于20%
        内存已用空间大于80%
        向邮箱发送告警邮件
        配合crond每5分钟检查一次

#!/bin/bash
#########################
#File name:6.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 08:56:03
#Description:
#########################
echo "报警脚本,要求如下:
        根分区剩余空间小于20%
        内存已用空间大于80%
        向邮箱发送告警邮件
        配合crond每5分钟检查一次"
echo
# 计算根分区的剩余空间百分比  
root_ram=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')  
# 计算内存已用百分比  
ram=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')  

if [[ $root_ram -gt 80 ]]; then  
    echo "根分区剩余空间小于20%"  
    if [[ $ram -gt 80 ]]; then   
        echo "内存已用空间大于80%"  
        echo "目前根分区和内存的容量都比较告急!!!,先发送邮箱提醒......" | mail -s "内存警告" 2711279281@qq.com  
    else  
        echo "内存也还比较充足"  
    fi  
else  
    echo "目前根分区空间充足"  
fi  


  
判断用户输入的是否是数字,如果是数字判断该数字是否大于10

#!/bin/bash
#########################
#File name:7.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 19:49:01
#Description:
#########################
echo "判断用户输入的是否是数字,如果是数字判断该数字是否大于10"
echo
for ((n=3; n>0; n-- ))
do
        read -p "请输入一个数字:" num
        if [[ $num =~ ^-?[0-9]+(\.[0-9]+)?$ ]]; then
                if [[ $num -gt 10 ]]; then
                        echo "当前数字大于10"
                       
                else
                        echo "当前数字不大于10"
                        
                fi
                break
        else

                echo "请输入数字,你还有$(($n -1))次机会"
        fi
done


对用户输入的任意两个整数进行算数运算

        要求的运算有和、差、乘积、商、余数,
        判断用户输入的参数是否是两个,如果不是,提示用法;
        判断用户输入的是否是整数,如果不是,则给出提示终止运行。

#!/bin/bash
#########################
#File name:8.sh
#Version:v1.0
#Email:admin@test.com
#Created time:2024-11-25 20:30:31
#Description:
#########################
echo "计算用户输入的任意两个整数的和、差、乘积、商、余数,
        判断用户输入的参数是否是两个,如果不是,提示用法;
        判断用户输入的是否是整数,如果不是,则给出提示终止运行。"
echo
for ((n=3; n>0; n--))
do
        read -p "请输入两个整数(中间用空格隔开),我会对其进行算术运算:" num1 num2
        if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; then
                if [[ $num2 -eq 0 ]]; then
                        echo "除数不能为0!!!"
                else
                        echo "两数的和为$(($num1 + $num2))"
                        echo "两数的差为$(($num1 - $num2))"
                        echo "两数的乘积为$(($num1 * $num2))"
                        echo "两数的商为$(($num1 / $num2))"
                        echo "两数的余数为$(($num1 % $num2))"
                fi
                break
        else
                echo "请输入两个整数,你还有$(($n - 1))次机会!!!"
        fi
done


http://www.kler.cn/a/410118.html

相关文章:

  • qt添加模块
  • .NET Core发布网站报错 HTTP Error 500.31
  • Canvas 前端艺术家
  • MySQL面试-1
  • el-table vue3统计计算数字
  • Python学习——字符串操作方法
  • 【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)
  • 1. Klipper从安装到运行
  • 单片机结合OpenCV
  • 发布订阅模式(TS)
  • [less] Operation on an invalid type
  • 数据治理:在企业数据管理中的关键角色与实现路径——《DAMA 数据管理知识体系指南》读书笔记- 第 3 章
  • 从入门到精通:解析如何使用亚马逊云服务器(AWS EC2)
  • 证明面积不超过1/8的一组凸形状可以平移填充进面积为1的凸形状内而不重叠
  • 非root用户安装CUDA
  • [M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)
  • 【Redis_Day6】Hash类型
  • leetcode hot100【LeetCode 238.除自身以外数组的乘积】java实现
  • Flink Standalone集群模式安装部署全攻略
  • leetcode day12 贪心 605+44
  • 漫谈 module caching——PyCharm jupyter notebook 在导入模块被更新后无法及时同步问题
  • rabbitmq exchange queue topic的关系
  • 前端---HTML(一)
  • 【CSP CCF记录】201809-2第14次认证 买菜
  • SpringMVC-03-HelloSpring
  • 人工智能之数学基础:线性代数在人工智能中的地位