Linux部分shell脚本汇总(三)
1.改文件后缀
#!/usr/bin/bash
for name in `ls *.html`
do
mv $name ${name%.html}.txt
done
2.按指定键执行指定命令
#!/usr/bin/bash
read -p "pls input a number : " n
case "$n" in
1)
systemctl status firewalld
echo "变量是1"
;;
2)
echo "变量是2"
;;
3)
echo "变量是3"
;;
*)
echo "请重新输入1-3"
exit
;;
esac
3.多种情况条件判断
#!/usr/bin/bash
read -p "pls input score to test level : " score
if [ $score -ge 90 ];then
echo "优秀"
elif [ $score -ge 80 ];then
echo "良好"
elif [ $score -ge 70 ];then
echo "中等"
elif [ $score -ge 60 ];then
echo "及格"
else
echo "不及格"
fi
4.小工具箱,指定键执行指定命令
#!/bin/bash
cat << EOF
m|M) show memory usages;
d|D) show disk usages;
q|Q) quit
EOF
read -p "your choice: " choice
case $choice in
m|M)
free -m
;;
d|D)
df -h
;;
q|Q)
exit
;;
*)
echo "Invalid input"
;;
esac
5.跳板机,跳到web1或web2
#!/usr/bin/bash
#server
web1=192.168.157.156 定义ip
web2=192.168.157.149
cat <<-EOF
------------------
|1. 192.168.157.156|
|2. web2 |
------------------
EOF
read -p "input your number: " num 输入
case "$num" in
1)
ssh alice@$web1 -p22
;;
2)
ssh alice@$web2
;;
esac
6.删除用户
#!/usr/bin/bash
#by liu
read -p "please input a username: " user
id $user &> /dev/null
if [ $? -ne 0 ] ;then
echo "no such user: $user"
exit
fi
read -p "are you sure ? [y/n] : " action
if [ "$action" = "y" ] ;then
userdel -r $user
else
echo "good!"
fi
7.输入1-5,如果输入其他则跳出
#!/bin/bash
while :
do
echo -n "Input a number between 1 yo 5: "
read aNum
case $aNum in
1|2|3|4|5)
echo "your number is $aNum"
;;
*)
echo "you do not select a number between 1 to 5,game is over!"
break //跳出循环体
;;
esac
done
8.查看当前路径.html文件大小
#!/bin/bash
for size in $(ls -l *.html | awk '{print 5}')
do
sum=$(($sum+$size))
done
echo $sum
9.运算
#!/bin/bash
fun () {
echo "输入两个数字进行运算"
echo "请输入第一个数字"
read aNum
echo "请输入第二个数字"
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum"
return $(($aNum+$anotherNum))
}
fun
echo "您输入的两个数字之和为 $? "
10.运算
#!/bin/bash
funcation () {
funcation=1
for ((i=1;i<=5;i++))
do
funcation=$[$funcation*$i]
done
echo "1*1*2*3*4*5"是: $funcation
}
funcation
11.判断网络与yum源
#!/bin/bash
check_net(){
echo "正在检测网络"
ping -c1 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
echo "您的网络没有问题"
else
echo "您的网络有问题"
exit
fi
}
check_net
echo "++++++++++++++++++++++++++++++"
check_yum(){
echo "正在检测yum源"
yum repolist &>/dev/null
if [ $? -eq 0 ];then
echo "您的源可以正常使用"
else
echo "您的源不能用,请手动配置"
exit 3
fi
}
check_yum
12.2*所输入的数
#!/bin/bash
double(){
read -p "please input a num: " num
return $[2*$num]
}
double
echo "double num is: $?"
13.判断用户输入的是否是数字
#!/bin/bash
read -p "请输入一个数值: " num
if [[ ! "$num" =~ ^[0-9]+$ ]];then 两个[ ]支持正则表达式
echo "你输入的不是数字,程序退出"
exit
fi
echo ccc
14.创建随机文件名的文件
#!/bin/bash
WORK_DIR=/oldboy/
create(){
i=1
while (($i<11))
do
cd $WORK_DIR && touch `tr -dc "a-z"</dev/urandom |head -c 10`_oldboy.html
i=$(($i+1))
done
}
check(){
if [ -d $WORK_DIR ];
then
create
else
mkdir $WORK_DIR
create
fi
}
check
15.创建用户并设置密码
#!/bin/bash
USER=oldboy
create_user(){
for i in {01..10}
do
RPASSWD=$(tr -dc [:alpha:] < /dev/urandom |head -c 8)
useradd $USER$i
echo $RPASSWD|passwd $USER$i --stdin
echo $USER$i----$RPASSWD >> /oldboy/userpasswd.txt
done
}
del_user(){
for j in {01..10}
do
userdel $USER$j
rm -rf /home/$USER$j
done
}
case $1 in
create)
create_user
;;
del)
del_user
;;
*)
echo "Usage:Please use $0 create or $0 del."
echo "####################################"
echo "create: create user $USER 01-10 and give it random passwd."
echo "del: delete $USER 01-10 and /home/$USER 01-10 directory. "
;;
esac
16.for循环打印下面这句话中字母数不大于6的单词
I am oldboy teacher welcome to oldboy training class.
#!/bin/bash
echo "=======开始======="
a='I am oldboy teacher welcome to oldboy training class'
for i in $a
do
num=`echo $i | wc -L`
if [ $num -le 6 ];then
echo $i
fi
done
17.免密登录
#!/bin/bash
passwd='1'
/usr/bin/expect <<-EOF
set time 30 设置超时时间
spawn ssh liu@192.168.157.160 df -Th
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof
EOF
18.免密登录
#!/usr/bin/expect
spawn ssh-keygen
expect {
".ssh/id_rsa):" { send "\r" ; exp_continue}
"Overwrite (y/n)?" { send "y\r" ; exp_continue}
"no passphrase):" { send "\r" ; exp_continue}
"again:" { send "\r" };
}
interact
spawn ssh-copy-id -i 192.168.157.160
expect {
"(yes/no)?" { send "yes\r"; exp_continue }
"password:" { send "redhat\r" };
}
interact
19.检测cpu是否正常
#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig |grep broadcast |awk '{print $2}')
if !which vmstat &>/dev/null;then
echo "vmstst command no found.Please install procps package"
exit 1
fi
US=$(vmstat |awk NR==3'{print $13}')
SY=$(vmstat |awk NR==3'{print $14}')
IDLE=$(vmstat |awk NR==3'{print $15}')
WAIT=$(vmstat |awk NR==3'{print $16}')
USE=$(($US+$SY))
if [ $USE -ne 1 ];then
echo "
Date: $DATE
Host: $IP
Problem: CPU utilization $USE "
fi
20.判断网站是否存活
#!/usr/bin/bash
URLLIST=$(egrep "com|cn" ./url.txt) ./ 当前目录
for url in ${URLLIST}
do
statuCode=$(curl -I --connect-timeout 3 -m 10 -s "${url}" | grep "HTTP")
if [[ ${statuCode: 9: 3} -eq 200 ]] || [[ ${statuCode: 9: 3} -eq 302 ]];then
echo "$(date +'%Y-%m-%d %H:%M:%S') - run monitor program ${url} is ok" >>/var/log/urlMonitor.log
else
echo "$(date +'%Y-%m-%d %H:%M:%S') - run monitor program ${url} is failed" >>/var/log/urlerrorMonitor.log
echo "[ERROR] ${url} Downtime! Please repair."
fi
done
21.判断网站是否存活
#!/bin/bash
# 将网站域名加入变量
website=(
www.baidu.com
www.qq.com
www.hangege.cn
)
for url in ${website[@]}
do
code=$(curl -L -I -m 5 -o /dev/null -s -w %{http_code} $url)
if [ $code -eq 200 ];then
echo "$(date +'%Y-%m-%d %H:%M:%S') - run monitor program ${url} is ok"
else
echo "$(date +'%Y-%m-%d %H:%M:%S') - run monitor program ${url} is failed"
fi
done
22.判断当前内核主版本是否为3,且次版本是否大于10
#! /bin/bash
a1=`uname -r | awk -F'.' '{print $1}'`
a2=`uname -r | awk -F'.' '{print $2}'`
if [ $a1 -eq 3 ];then
echo "当前内核主版本为3"
else
echo "当前内核主版本不为3,为$a1"
fi
if [ $a2 -ge 10 ];then
echo "当前次版本大于10,为$a2"
else
echo "当前次版本小于10,为$a2"
fi
23.判断httpd是否运行
#! /bin/bash
ps -axu| grep httpd &>/dev/null
if [ $? -eq 0 ];then
echo "http正在运行"
else
echo "httpd没有运行"
read -p "请问需要运行吗Y|N:" num
case $num in
Y|y)
systemctl start httpd
if [ $? -eq 0 ];then
echo "启动完毕"
else
echo "请手动检查是否安装httpd"
fi
;;
N|n)
echo "正在退出"
exit 0
;;
esac
fi
24.判断指定的主机是否能ping通,必须使用$1变量
#!/bin/bash
read -p "请输入所要测试的主机:" ip
ping -w 1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip ok"
else
echo "$ip no"
fi
25.判断: 如果vsftpd启动,输出以下信息:
vsftpd服务器已启动…
vsftpd监听的地址是:
vsftpd监听的端口是:
vsftpd的进程PID是:
#! /bin/bash
echo "正在检测vsftpd"
while :
do
ss -tnlp | grep vsftpd &>/dev/null
if [ $? -eq 0 ];then
echo "vsftpd 存活"
else
echo "vsftpd 正在启动"
fi
systemctl start vsftpd
dk=`ss -tnlp|grep vsftp|awk '{print $4}'|awk -F':' '{print $4}'`
pid=`ps -axu | grep [v]sftpd|awk '{print $2}'`
ps -axu | grep [v]sftpd &>/dev/null
echo "ftp已启动"
echo "监听的地址:"
echo "ftp监听的端口:$dk"
echo "ftp进程PID:$pid"
break
done
- 使用case实现成绩优良差的判断
#! /bin/bash
read -p "请输入您的成绩:" num
case $num in
[0-9]|[1-2][0-9])
echo "差"
;;
[3-6][0-9])
echo "中"
;;
[7-9][0-9]|100)
echo "优"
;;
esac
27.for创建20用户
用户前缀由用户输入
用户初始密码由用户输入
例如:test01,test10
#! /bin/bash
for i in {01..20}
do
read -p "请输入用户名:" name
read -p "请输入密码:" password
useradd $name$i -p $password
let i++
done
28.for ping测试指定网段的主机
网段由用户输入,例如用户输入192.168.2 ,则ping 192.168.2.10 — 192.168.2.20
UP: /tmp/host_up.txt
Down: /tmp/host_down.txt
#! /bin/bash
read -p "请输入ip网段:" num
for i in {1..255}
do
let i++
ping -w 1 $num.$i &>/dev/null
if [ $? -eq 0 ];then
echo "$num.$i Up"
echo "$num.$i Up" >>/tmp/host_up.txt
else
echo "$num.$i Down"
echo "$num.$i Down" >>/tmp/host_down.txt
fi
done