简易脚本实例带你了解Shell脚本

一、

编写脚本完成以下条件
file_check.sh
在执行时如果脚本后未指定检测文件报错“未指定检测文件,请指定”
如果脚本后指定文件不存在报错“此文件不存在”
当文件存在时请检测文件类型并显示到输出中
脚本:

#!/bin/bash
[ -z "$1" ] && {
        echo Error:Test file not specified,plaese specify.
        exit
}
[ -e "$1" ] || {
        echo Error:$1 not exist
}
[ -L "$1" ] && {
        echo $1 is a link file
}
[ -b "$1" ] && {
        echo $1 is a block file
}
[ -c "$1" ] && {
        echo $1 is a char file
}
[ -d "$1" ] && {
        echo $1 is a direcotry
}
[ -S "$1" ] && {
        echo $1 is a socket file
}
[ -f "$1" ] && {
        echo $1 is a common file
}

也可以这样,第二种更为简洁:
在这里插入图片描述
效果:
在这里插入图片描述

二、

ls -l 目录 可以显示目录中所有文件案的属性
清按照文件大小进行排序并找出最大的2个文件并显示其名称
脚本:

!/bin/bash
ls -S * | head -n 2

在这里插入图片描述
在这里插入图片描述

三、

ifconfig 网卡 可以显示此网卡的信息
在这里插入图片描述
显示信息中包含此网卡使用的ip地址
请用命令过滤此ip并在输出时只显示ip其他信息不显示
脚本:

#!/bin/bash
[ -z "$1" ] && {
        echo "Error:no interface name,please input interface following scripts."
        exit
}

ifconfig $1 &> /dev/null || {
        echo "$1 is not found."
        exit
}
ifconfig $1 |head -n 2 |tail -n 1 |cut -d " " -f 10

四、

编写 Apache_port.sh
此脚本后介入数字
http的端口就改为此数字
假设selinux为关闭状态

脚本:

#!/bin/bash

[ -z "$1" ] && {
        echo Error:Please input port number
        exit
}

[ -z "`netstat -antlupe | grep $1`" ] || {
        echo "Error: $1 port is exist"
        exit
}

[ -e "/etc/httpd/conf/httpd.conf" ] || {
        yum install httpd -y &> /dev/null || {
                echo apache is not install and yum repo not avaliable
                exit
        }
}

sed -i "/^Listen/c Listen $1" /etc/httpd/conf/httpd.conf

systemctl restart httpd > /dev/null && {
        echo "Configure port successful"
} || {
        echo "Can't start service"
}


效果:
在这里插入图片描述
在这里插入图片描述

五、

练习脚本:
请显示系统中能被su命令切换的用户名称

#!/bin/bash
grep -E "bash$" /etc/passwd | cut -d : -f 1

效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、

统计杂在系统中能su切换的
并且用户加目录不在/home下的
用户数量
脚本;
在这里插入图片描述
效果:
在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 10399213 查看本文章

七、

1
ip_show.sh 网卡            显示当前的ip地址
在这里插入图片描述
效果:
在这里插入图片描述
在这里插入图片描述
2
host_messages.sh   显示当前主机的名称,ip,登陆当前主机的用户
hostname: xxxxx
ipaddress: xxxx.xxxx.xxx.xxx
username: root
在这里插入图片描述
效果:
在这里插入图片描述
3.
clear_log.sh 执行此脚本后可以清空日志
内容:
在这里插入图片描述
效果:
在这里插入图片描述
4.显示网卡
在这里插入图片描述

八、

课下脚本
for 语句
create_user.sh userfile passfile
userfile用的用户会被全部建立
passfile中的密码会被全部设定

分别取三次。

#!/bin/bash
names=($(cat /mnt/userfile))
passs=($(cat /mnt/passfile))
for name in `cat /mnt/userfile`
do
        useradd $name
        echo $name user is already make.
done

echo ${passs[0]} |passwd ${names[0]} --stdin
echo ${passs[1]} |passwd ${names[1]} --stdin
echo ${passs[2]} |passwd ${names[2]} --stdin

效果:
在这里插入图片描述
在这里插入图片描述
且密码正确。

脚本练习:
check_host.sh
用此脚本检测10台与您当前主机直连主机是否网络通常
如果网络通常请显示主机的ip列表
在这里插入图片描述
效果:
在这里插入图片描述

脚本练习:
check_file.sh
please input filename: file
file is not exist
file is file
file is direcory
此脚本会一直询问直到用户输入exit为止

脚本:
在这里插入图片描述
效果:
在这里插入图片描述

十一

脚本练习
system_watch.sh disk | memory | upload (每秒显示)
disk 监控磁盘使用情况 (df)
memory 监控内存使用情况 (free)
upload 监控启动负载 (uptime)
在这里插入图片描述

十二

脚本练习
auto_ssh 192.168.0.1 westos
可以自动连接目标主机当目标主机网络不通时报错
脚本

#!/bin/bash
AUTO_CMD()
{
/usr/bin/expect <<EOF
spawn ssh root@$1 $3
expect {
"yes/no" { send "yes\r";exp_continue }
"password" { send "$2\r" }
}
expect eof
EOF
}

ping -c1 -w1 $1 &>/dev/null && {
        AUTO_CMD $1 $2 $3
}

效果:
在这里插入图片描述
在这里插入图片描述

发布了41 篇原创文章 · 获赞 15 · 访问量 2843

猜你喜欢

转载自blog.csdn.net/thermal_life/article/details/105112102