Linux 10个shell脚本的练习!

2,577 阅读2分钟

这是我参与 8 月更文挑战的第 29 天,活动详情查看: 8月更文挑战

1.判断指定进程的运行情况

#!/bin/bash
NAME=httpd #这里输入进程的名称
NUM=$(ps -ef |grep $NAME |grep -vc grep)
if [ $NUM -eq 1 ]; then
    echo "$NAME running."
else
    echo "$NAME is not running!"
fi

image-20210815211503954

2.判断用户是否存在

#!/bin/bash
read -p "请输入用户:" user
for i in `awk -F :  '{print $1}' /etc/passwd`
do
        if [ $i == $user ]
        then
                echo "用户已存在!"
                exit
        else
                isfind=false
        fi
done
echo "用户不存在!"

image-20210815212023949

3.生成随机数

#!/bin/bash
read -p "请输入随机生成的数字位数:" num
echo $RANDOM | cksum | cut -c 1-$num

image-20210815212504633

4.判断软件包是否安装

read -p "请输入要查询的软件包:" software

if rpm -q $software &>/dev/null ;

then

    echo "软件包已经安装!"

else

    echo "软件包未安装!"

fi

image-20210815212907915

5.判断主机是否存活

ip_list="192.168.254.1 192.168.254.10" #定义一个主机列表
for ip in $ip_list;do
        NUM=1
        while [ $NUM -le 3 ];do
                if ping -c 1 $ip > /dev/null;then
                        echo "$ip 存在于网络中!"
                        break
                else
                        echo "$ip 不存在于网络中!"
                        break
                fi
        done
done

image-20210815213048129

6.判断指定主机端口状态

HOST=127.0.0.1 #被扫描主机
PORT="22 80 8080" #指定需要扫描的端口
for PORT in $PORT; do #进行for循环
        if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then
                echo    "$PORT open"
        else
                echo    "$PORT close"
        fi
done

image-20210815213248028

7.获取主机IP地址

#!/bin/bash 
IP=$(ip address show | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
echo "$IP"

image-20210815214523211

8.判断文件或目录是否存在

#!/bin/bash

if [ $# -eq 0 ];then
    echo "未输入任何参数,请输入参数"
    echo "用法:$0 [文件名 | 目录名]"
fi

if [ -f $1 ]; then
    echo "该文件 存在"
    ls -l $1
elif [ -d $1 ]; then
    echo "该目录 存在"
    ls -ld $1
else
    echo "该文件or目录 不存在"
fi

image-20210815222035061

9.显示系统信息

#!/bin/bash
#
HOSTNAME=`hostname`
IP=`ip a show ens33 | grep "inet" | grep -v "inet6" | awk '{print $2}' | cut -d'/' -f1`
SYSTEM=`cat /etc/centos-release`
CORE=`uname -r`
CPU=`cat /proc/cpuinfo | grep 'model name' |uniq | cut -d: -f2`
MEMORY=`free -mh | grep -i "mem" | awk '{print$2}'`
DISKNUM=`fdisk -l | grep -i "/dev" | grep -i "disk" | wc -l`
systemname=("HOSTNAME" "IP" "SYSTEM VERSION" "CORE VERSION" "CPU" "MEMORY SIZE")
systeminfo=("$HOSTNAME" "$IP" "$SYSTEM" "$CORE" "$CPU" "$MEMORY")
for s in `seq 1 $DISKNUM`;do
    eval DISK$s=`fdisk -l | grep -i "/dev" | grep -i "disk" | head -$s | tail -1|  awk '{print $2$3$4}' | cut -d',' -f1`
    eval systeminfo[$(($s+5))]='$'DISK$s
    systemname[$(($s+5))]="DISK$s SIZE"
done
for i in ${!systeminfo[*]};do
    echo "--------------------------------------------------------------"
    printf "|%-15s| %-43s|\n" "${systemname[$i]}" "${systeminfo[$i]}"
done
echo "--------------------------------------------------------------"

image-20210815224721982

10.判断输入的是否为IP地址

#!/bin/bash
IP=$1
if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
   FIELD1=$(echo $IP|cut -d. -f1)
   FIELD2=$(echo $IP|cut -d. -f2)
   FIELD3=$(echo $IP|cut -d. -f3)
   FIELD4=$(echo $IP|cut -d. -f4)
   if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; 
   then
            echo "$IP 是一个IP地址!"
        else
            echo "$IP 不是一个IP地址!"
        fi
    else
        echo "IP地址格式错误!"
fi

image-20210815231317437

推荐阅读

Linux Shell编程基础!

Linux sudo和sudoers详解!

Linux部署samba服务器!

Linux Zabbix 5.0安装详解!

docker之docker-compose的使用!

docker之Dockerfile文件详解!