自己敲过的一些简单shell脚本

敲过的一些简单脚本,把他们贴上来偶尔看看,过不了多久应该就会觉得非常小儿科吧,不过应该会对shell脚本的流程控制理解有些帮助。

#!/bin/bash
//p=176.202.52.
////for i in $(seq 1 254)
//for ((i=1;i<=5;i++))
//do
// ping -c2 -i0.1 -w1 $p$i &> /dev/null
//if [ $? -eq 0 ];then
// echo "$p$i neng ping tong "
//fi
//done

//i=1
//while :
//do
// echo "$i"
// let i++
// sleep 0.1
//done
p=176.202.52.
i=1
while [ $i -le 254 ]
do
ping -c1 -i0.1 -w1 $p$i &> /dev/null

if [ $? -eq 0 ];then
echo "$p$i  neng ping tong "
fi
let i++ 

done

#!/bin/bash
//read -p "plese input a user:" a
//[ -z $a ] && echo "no user inputed" && exit
//stty -echo
//read -p "plese input password:" b
//stty echo
//echo ""
//[ -z $b ] && echo "no password inputed " && exit
//useradd $a &> /dev/null
//echo $b | passwd --stdin $a
//if [ -d /media/iso ]; then
// echo this dir is exsit
//else
// mkdir -p /media/iso
// echo "this dir has been created"
//fi
//ping -c 3 192.168.4.254 &> /dev/null
//ping -c2 -i0.2 W1 192.168.4.10 | head -2
//read -p "qing shu ru ip :" a
//ping -c3 -i0.2 W1 $a &> /dev/null
//if [ $(echo $?) -eq 0 ]; then
//if [ $? -eq 0 ];then
// echo "keyi ping tong $a"
//else
// echo "bukeyi ping tong $a"
//fi

//while :
num=$[ RANDOM%10+1 ] //随机数一旦产生就会固定,以为只执行了一次脚本,循环了多次而已,
//如果没有加for循环,再执行脚本来猜 随机数就会变化!!
//for i in {1..5}
i=0
while :
do
read -p "please input your number1-10:" cai
let i++
if [ $num -eq $cai ];then
echo "you are right !"
echo "you cai le $i ci"
exit
elif [ $num -lt $cai ];then
echo "your number are big "
// echo "the currect number is $num"
else
echo "your number are small"
// echo "the currect number is $num"
fi
done
//read -p "plese input your score0-100:" num
//if [ $num -ge 90 ]; then
// echo "sheng gong gai si "
//elif [ $num -ge 80 ];then
// echo "deng feng zao ji "
//elif [ $num -ge 70 ];then
// echo "lu huo cun qing "
//elif [ $num -ge 60 ];then
// echo "lue you xiao cheng "
//else
// echo "hehe da"
//fi
//a=$(cat /etc/passwd | head -10 | tail -1 | cut -d: -f3 )

//echo $0
//echo $1
//shift
//echo $2
//echo $*
//echo $//
//
//i=1
//while :
//do
// echo "$i"
// let i++
//done
//

#!/bin/bash
//case的简单脚本应用!
//case $1 in
//redhat)
// echo "fedora";;
//fedora)
// echo "redhat";;
//*)
// echo "error";;
//esac
//

//case $1 in
//-l)
// ls -lh $2;;
//-u)
// useradd $2;;
//-c)
// cd $2;;
//-r)
// rm -rf $2;;
//*)
// echo "Usage $0 [-n|-e|-c|-r] file "
//esac

a=$(seq 9)
b=$(seq 9)
c=haha
for i in $
do
mycolor(){ echo -e "\033[3$a;4$bm$c\033[0m" ; }
mycolor $c
done

#!/bin/bash
//几种跳出或中断脚本 continue break exit。
for i in $(seq 9)
do
// b=$(seq 9)
mcolor(){
echo -e "\033[3$im$b\033[0m"
}
mcolor $b
done

//for i in {1..5}
//do
// [ $i -eq 3 ] && exit
// echo $i
//done
//echo "over"

#!/bin/bash
//死循环球和跳出方法。
sum=0
while :
do
read -p "please input number:" num
[ $num -eq 0 ] && break
let sum+=$num
done
echo $sum

#!/bin/bash
//批量根据提供文件创建用户并给密码。
//user=cat $1
//for i in $user
//do
// useradd $i
// echo 1 | passwd --stdin $i
//done

//几种造数方法。
//for ((i=1;i<=5;i+=2)) 初值1 条件小于5 步长为2
//for i in $(seq 1 2 5) 从1开始 步长为 2 到 5 结束
//for i in {1..5} 从1到5连续自然数。
//for i in $[$RANDOM%10+1] 1-10的随机数。
//a=$[$RANDOM%10+1]
//for i in $(seq 1 $a)
//do
// echo $i
//done

//直到型循环 有规律创建用户
//i初值为1 小于10 创建user1 然后让i变成2 再判断i=2《10 继续创建user2
//再判断 直到i》10跳出循环。
//a=user
//i=1
//while [ $i -le 10 ]
//do
// useradd $a$i
// echo 1 | passwd --stdin $a$i
// let i++
//done

//直到猜对跳出四循环,且显示猜的次数。
//a=$[$RANDOM%100+1] 放在外面意味着随机数生成即固定。
// 放在里面意味着每次循环都会重新生成一个随机数
//那么提示的大小对下次猜测没有任何意义。
//i=0
//while :
//a=$[$RANDOM%10+1]
//do
// read -p "plesae input a number 1-100:" num
// let i++ //每次输入就记录一次,且i=0必须放循环外
//放内:每次循环完后i=0了所以只要猜对了就永远为1次!!!
// if [ $num -eq $a ];then
// echo "you are right !"
// echo "you guess $i ci"
// exit
// elif [ $num -gt $a ];then
// echo "you are great "
// else
// echo "you are less "
// fi
//done

// [ $a$i == "192.168.4.5" ] && continue
a=192.168.4.
i=1
while [ $i -le 254 ]
[ $a$i == "192.168.4.5" ] && continue
do
ping -c2 -i0.1 -w1 $a$i &> /dev/null
if [ $? -eq 0 ];then
echo "host $a$i is up"
else
echo "host $a$i is down"
fi
let i++
done

#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
//echo ${x:$[$RANDOM%62]:1 }
//echo ${x:$[$RANDOM%54]:8 }
//y=$[$RANDOM%62]
//echo "$x" | cut -b $y-$[$y]
a=1
c=
while :
do

b=$(echo ${x:$[$RANDOM%62]:1 })
c=$c$b
echo $b
let a++
[ $a -gt 8 ] && break

// let a++
done
echo "$c"

#!/bin/bash
//批量改扩展名。
//cd /root
//for i in $(ls .$1)
//do
// a=${i/$1/$2}
// b=${i%.
}
//// mv $i $a
// mv $i {$b}$2
//// ${i% .*}
//
////done

//变量赋初始值。

//read -p "please input user name :" user
//[ -z $user ] && exit
//read -p "please imput user pass :" pass
//stty -echo
//pass=${pass:-123456}
//stty echo
//useradd $user
//echo "$pass" | passwd --stdin $user

//sum=0
//read -p "please imput sum number :" num
// num=${num:-100}
//for i in $(seq $num)
//do
// let sum+=i
//done
// echo "$sum"
//
//
//read -p "please imput a number:" x
//i=1
//sum=0
//x=${x:-100}
//while :
//do
// [ $i -gt $x ] && break
// let sum+=i
// let i++
//done
// echo "$sum"
//
//数组的定义和使用

// expect 模拟人进行交互 人首先是看,看到行末显示的是password(出现就行了!!不一定写这个)
//就输入密码Taren1然后是回车\n是模拟回车的意思。看到//就看到命令行 就可以输入要执行的命令。
//expect <<EOF
//set timeout 60
//spawn ssh -o StrictHostKeyChecking=no 192.168.4.$1
//expect "yes/no" {send "yes\n"}
//expect "password" {send "Taren1\n"}
//expect "//" {send "id haha\n"}
//expect "//" {send "exit\n"}
//EOF
//最后一行是不执行的 exit 可以写成abc。
//第一次连-o StrictHostKeyChecking=no 就不会提示“yes/no”
//set timeout 60 设置期待超时时间为60s 防止电脑比较慢。

#!/bin/bash
//写一个国际棋盘表 类似99乘法表的循环。
//a=$(echo -e $"\033[32;42m"[ ]"\033[0m")
//b=$(echo -e $"\033[34;44m"[ ]"\033[0m")
//c=$(echo $a$b$a$b$a$b$a$b)
//d=$(echo $b$a$b$a$b$a$b$a)
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//echo $a$b$a$b$a$b$a$b
//echo $b$a$b$a$b$a$b$a
//for i in {1..4}
//do
// echo $c
// echo $d
//done
a=$(echo -e $"\033[32;42m"[ ]"\033[0m")
b=$(echo -e $"\033[34;44m"[ ]"\033[0m")
for i in {1..8}
do
for j in {1..4}
do
c=$[$i%2]
[ $c -eq 0 ] && echo -n $a$b || echo -n $b$a
done
echo ""
done

#!/bin/bash
yum -y install vsftpd
sed -i 's///chown_uploads/chown_uploads/g;/^//anon/s/^////' /etc/vsftpd/vsftpd.conf
chmod 777 /var/ftp/pub
systemctl restart vsftpd
systemctl enable csftpd

#!/bin/bash
//找出用户名对应的密码MD5值
user=$(sed -n '/bash$/s/:.*//p' /etc/passwd)
for i in $user
do
// pass=$(egrep $i /etc/shadow | cut -d: -f2 )
pass=$(egrep $i /etc/shadow | awk -F: '{print $2}' )

echo "$i --> $pass"

done
//[root@D ~]// grep root /etc/shadow 经过观测/etc/shadow这个文件中一行只出现过一次用户名 所以直接可以egrep 用户名就可以确定它的位置。
//root:$6$ozDRfZxw$/nakdJT.FTewUbQAC
//[root@D ~]// pass=$(grep root /etc/shadow) 掐头区尾只能对变量做,所以先把结果给变量 再进行操作。
//[root@D ~]// pass1=${pass//:} 对变量掐头
//[root@D ~]// pass2=${pass1%%:
} 对变量去尾
//[root@D ~]// echo $pass2
//$6$ozDRfZxw$/nakdJT.FTewUbQAC8aZzinmJpkHgPGx1icyURamdY3E9EQKorDZgglIfbH/IxyKyRP3EJdB0Ftp8geBsMw44.

#!/bin/bash
//echo "Content-type: text/html"
//echo ""
//ifconfig eth0 | awk '/netmask/{print "Ip:"$2}'
//echo "<br>"
//ifconfig eth0 | awk '/RX p/{print "接收流量:"$5}'
//echo "<br>"
//ifconfig eth0 | awk '/TX p/{print "发送流量:"$5}'
//echo "<br>"
//df | awk '/\/$/{print "根分区可用:"$4}' //不加-h方便后期数值比较!
//echo "<br>"
//free |awk '/Mem/{print "内存可用:"$NF}'
echo "Content-Type:text/html;charset=utf-8"
echo

echo SERVER_SOFTWARE = $SERVER_SOFTWARE //服务器软件
echo SERVER_NAME = $SERVER_NAME //服务器主机名
echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE //CGI版本
echo SERVER_PROTOCOL = $SERVER_PROTOCOL //通信使用的协议
echo SERVER_PORT = $SERVER_PORT //服务器的端口号
echo REQUEST_METHOD = $REQUEST_METHOD //请求方法(GET/POST/PUT/DELETE..)
echo HTTP_ACCEPT = $HTTP_ACCEPT //HTTP定义的浏览器能够接受的数据类型
echo SCRIPT_NAME = $SCRIPT_NAME //当前运行的脚本名称(包含路径)
echo QUERY_STRING = $QUERY_STRING //地址栏中传的数据(get方式)
echo REMOTE_ADDR = $REMOTE_ADDR //客户端的ip

#!/bin/bash
a=$(yum repolist |awk '/repolist/{print $2}'|sed 's/,//g')
[ $a -le 0 ] && echo "yum 不可用" && exit
yum -y install gcc openssl-devel pcre-devel &> /dev/null
[ $? -eq 0 ] && echo "gcc openssl pcre 安装完成" || echo "软件为能成功安装"
tar -zxf /root/share/nginx-1.10.3.tar.gz -C /root/share
cd /root/share/nginx-1.10.3
./configure &> /dev/null
[ $? -eq 0 ] && echo "配置完成" || echo "配置失败"
make &> /dev/null
[ $? -eq 0 ] && echo "编译完成" || echo "编译失败"
make install &> /dev/null
[ $? -eq 0 ] && echo "Nginx安装完成" || echo "安装失败"
b=$(netstat -ntulp |awk '/:80/{print $7}'|cut -d/ -f2)
c=/usr/local/nginx/sbin/nginx
netstat -ntulp |grep ":80" &> /dev/null
if [ $? -ne 0 ];then
$c
echo "nginx服务从关闭到启动"
elif [ $b == "httpd" ];then
systemctl stop $b
$c
echo "已关闭httpd并启动nginx服务"
else
$c -s stop
$c
echo "nginx服务重新启动成功"
fi

//!/bin/base
c=/usr/local/nginx/sbin/nginx
case $1 in
stop)
$c -s stop
echo "nginx服务已关闭";;
restart)
$c -s stop
$c
echo "nginx服务重启成功";;
status)
netstat -ntulp |grep nginx
[ $? -ne 0 ] && echo "nginx服务未开启";;
*)
echo "Useage stop restart status"
esac

#!/bin/bash
a=$(uptime |awk '{print$8,$9,$10}')
b=$(ifconfig eth0 | awk '/RX p/{print $5}')
c=$(ifconfig eth0 | awk '/TX p/{print $5}')
d=$(free |awk '/Mem/{print $NF}')
e=$(df | awk '/\/$/{print $4}')
f=$(cat /etc/passwd |wc -l)
g=$(who |wc -l)
h=$(rpm -qa |wc -l)
echo "cpu 前1,5,15分钟的负载分别为:$a"
echo "网卡的接收流量为:$b"
echo "网卡的接收流量为:$c"
echo "目前内存可用空间为:$d"
echo "根分区目前可用空间为$e"
echo "本机目前用户个数为:$f"
echo "本机当前登陆用户个数:$g"
echo "本机当前安装的软件包个数为:$h"

#!/bin/bash
a=$(awk '/Failed/ && $9!~/invalid/{print $11}' /var/log/secure |awk '{a[$1]++}END{for (i in a){print i,a[i]}}'|awk '{if($2>5){print$1}}')
b=$(awk '/Failed/ && $9!~/invalid/{print $11}' /var/log/secure |awk '{a[$1]++}END{for (i in a){print i, a[i]}}'|awk '{if($2>5){print$1}}' )
echo $a
echo $b

#!/bin/bash
jindu(){
while :
do
echo -n "//"
sleep 1
done
}
jindu &
cp -r $1 $2
kill $!

#!/bin/bash
read -p "please imput one number :" a
read -p "please imput two number :" b
read -p "please imput three number :" c
//if [ $a -gt $b ];then
// if [ $b -gt $c ];then
// echo $a$b$c
// else
// [ $a -gt $c ] && echo $a$c$b || echo $c$a$b
// fi
//else
// if [ $a -gt $c ];then
// echo $b$a$c
// else
// [ $b -gt $c ] && echo $b$c$a || echo $c$b$a
// fi
//fi
//三个数字还可以用if强行判断6次 数字多了不能强行这么判断!!!要用位置替换。

d=0
if [ $a -gt $b ];then
d=$a
a=$b
b=$d
fi
if [ $a -gt $c ];then
d=$a
a=$c
c=$d
fi
if [ $b -gt $c ];then
d=$b
b=$c
c=$d
fi
echo $a,$b,$c

//这两个方法有如下几个知识点
//① :if双分支套双分支,要理清楚里面的结构关系。 算法为三个数排序有6种排法
//② :1、变量即容器,要想两个变量的值互换,即想要两个容器里装的东西互换,必须要引入第三个容器。先把a的倒入c,a装入b,b再装c即可。
//[root@server0 ~]// a=1
//[root@server0 ~]// b=2
//[root@server0 ~]// c=3
//[root@server0 ~]// c=$b
//[root@server0 ~]// b=$a
//[root@server0 ~]// a=$c
//[root@server0 ~]// echo $a
//2
//[root@server0 ~]// echo $b
//1
// 如果没有引入的话,只有倒掉其中一个,而且是先倒那个容器的东西变了,后倒东西那个容器没变。那么,两个容器装的东西就肯定一样了。
// 2、三个变量(容器)从小到大排序:只需要保证第一个容器装的值最小,第二个容器装的值第二小,第三个容器装的值最大即可。
//先确定第一个最小:a如果比b大了 b的值倒给a a装的值是ab中小的了。 再来,a装的值和c装的值比,a比c大了把c装的倒给a 这时候a装的一定是最小的了。
//确定好了最小的了,剩下的两个再来比,b装的值大与c了 就把c的倒给b 让b装的值变成bc中装的值小的那个。最后容器永远摆放为abc 但是过程中要用到d容器。!!!

猜你喜欢

转载自blog.51cto.com/13659481/2120905