一.用变量生成随机密码
比如自定义密码里面是数字和字母(或者还可以是某些符号等),随机生成一个想要的多少位的密码
[root@localhost test]#vim mima.sh
#!/bin/bash
str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPKRSTUVWXYZ0123456789"
for i in {1..6}
do
num=$[RANDOM%${#str}]
key=${str:num:1}
passwd=$key$passwd
done
echo "随机生成的六位数密码为:$passwd"
##随机密码,非常方便
echo `cat /dev/random|tr -dc [[:alnum:]]|head -c 6`
2、将一个文件拆分两个或多个文件
假设有一个几千行的大文件,想要分割成多个100行的小文件,可以使用该脚本,虽然有split命令,看一下脚本实现
[root@localhost /test]#cat fenge.sh
#!/bin/bash
##计划以换行为分隔符
IFS=$'\n' ##这一步是必须要有的,否则默认是空格和换行一起为分隔符
#定义k变量充当为行计数器
k=0
i=1 #定义i变量充当自动分配给文件的累加序号
for line in `cat /data/123.txt` ##调用文件内容,可以是反引号,也可以是$(),获取cat命令查看输出结果
do
let k++ #每读一行,k累计加一
j=$[k%100] #这里的j变量来判断行数是否满足一百行
if [ $j -eq 0 ];then
echo $line >> /data/test"$i".txt ##满足100行会将文件都重定向输入至test$i文件中
let i++ ##但是因为是100行分割一次,所以变量i值记录有多少个100行,
else ##等到满足了100行,i会加1,然后下一次会更换文件序号,后面再重定向记录到新的文件当中
echo $line >>/data/test"$i".txt
fi
done
IFS=$IFS_BAK #还原默认分隔符,这里实际上也无所谓,因为本质上还是\n,并不是以特殊的符号为分隔符
3、将十进制的IP地址转化为二进制的IP地址
#!/bin/bash
read -p "请输入一个ip地址:" ip
a=1
b=0
while [ $a -le 4 ]
do
#取IP地址的“.”前面的首字段
num=${ip%%.*}
for i in {1..8}
do
var=$[num % 2]
sum=$var$sum
num=$[num / 2]
done
#除去IP地址的首个字段,并将(除去首个字段的IP)重新赋值给变量
ip=${ip#*.}
let a++
echo -n ${sum:0:8}
let b++
if [ $b -lt 4 ];then
echo -n '.'
else
break
fi
done
echo
补充:可以使用bc计算器
echo "obase=2;ibase=10;128" | bc
echo "obase=2;256"|bc ##默认是十进制数转化
补充:将255以内的数字变为二进制
#!/bin/bash
#把0~255的十进制整数转换成8位二进制数
read -p "请输入一个0~255的整数:" num
for i in 128 64 32 16 8 4 2 1
do
NUM=$[num - i]
if [ $NUM -lt 0 ]
then
echo -n 0 ##比i小则为0,echo -n为不换行输出
else
echo -n 1 ##比i大则为1
num=$[num - i]
fi
done
echo ##换行
echo "obase=2;256"|bc
采用bc计算器做进制转换
read -p "请输入一个0~255的整数:" i
echo "obase=2;${i}"|bc ##默认是十进制数转化
echo "obase=2;ibase=10;${i}"|bc ##默认是十进制数转化
补充:取余数,把255以内的数字变为二进制
#!/bin/bash
read -p "请输入一个0-255的整数:" num
for i in {1..8}
do
var=$[num % 2]
sum=$var$sum
num=$[num / 2]
done
echo $sum
4、检测重要文件是否发生改变
[root@localhost xh]#vim md5.sh
#!/bin/bash
file=(/opt/*)
l=${#file[*]}
for((i=0;i<$l;i++))
do
md5sum ${file[$i]} >>/data/md5.txt ##记录密码的文件
done
方法二:
#!/bin/bash
for i in `ls /opt/*`
do
[ -f ${i} ] && md5sum ${i} >>/data/md5.txt
done
[root@localhost data]#cat md5.txt
ba1f2511fc30423bdbb183fe33f3dd0f /opt/1.txt
ba1f2511fc30423bdbb183fe33f3dd0f /opt/2.txt
ba1f2511fc30423bdbb183fe33f3dd0f /opt/3.txt
ba1f2511fc30423bdbb183fe33f3dd0f /opt/4.txt
ba1f2511fc30423bdbb183fe33f3dd0f /opt/5.txt
[root@localhost xh]#vim md5test.sh
#!/bin/bash
filenew=(/opt/*)
length=${#filenew[*]}
for((j=0;j<${length};j++))
do
key1=$(cat /data/md5.txt | grep "${filenew[$j]}") ##在记录密码的文件中去查看原本的密码
key2=$(md5sum "${filenew[$j]}" ) ##获取新文件的密码
if [ "$key1" = "$key2" ];then ##将两次的密码进行字符串的比较
echo "${filenew[$j]} 文件没有发生改变"
else
echo "${filenew[$j]} 文件发生改变!"
fi
done
[root@localhost xh]#echo 456 > /opt/1.txt
[root@localhost xh]#cat /opt/1.txt
456
[root@localhost xh]#echo 456 > /opt/3.txt
[root@localhost xh]#bash md5test.sh
/opt/1.txt 文件发生改变!
/opt/2.txt 文件没有发生改变
/opt/3.txt 文件发生改变!
/opt/4.txt 文件没有发生改变
/opt/5.txt 文件没有发生改变
5、购物商场的编写
[root@localhost xunhuan2]#vim shoppingtest.sh
#!/bin/bash
a=0
i=1
sum=0
while [ $a -eq 0 ]
do
echo "欢迎来到第 $i 家店"
read -p "是否要进店选购?(yes/no)" DO
while [ $DO = "yes" ]
do
echo "1:衣服¥500"
echo "2:裤子¥400"
echo "3:鞋子¥350"
echo "4:帽子¥150"
echo "5:袜子¥50"
echo "6或其他:放弃选购"
read -p "请选择你需要的商品序号:" num
case $num in
1)
echo "选购衣服成功"
let sum+=500
;;
2)
let sum+=400
;;
3)
echo "选购鞋子成功"
let sum+=350
;;
4)
echo "选购帽子成功"
let sum+=150
;;
5)
echo "选购袜子成功"
let sum+=50
;;
*)
echo "放弃购买"
esac
read -p "是否再继续选购(yes/no)" DO
done
read -p "是否继续逛下一个店家(yes/no)" GO
if [ $GO = "yes" ];then
let i++
else
echo "您一共逛了 ${i} 家商店"
echo "您一共消费了${sum} 元 "
break
fi
done
6、批量判断及创建用户
用户名存放在一个name.txt文件中,每行一个用户名,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码**
[root@localhost /test]#cat name.sh
#!/bin/bash
for name in $(cat /test/name.txt )
do
#读取用户文件,验证改USER变量中的用户是否存在,有则返回0
#cat /etc/passwd |awk -F: '{ print $1 }'|grep "$name" &>/dev/null
id $name &>/dev/null
if [ $? -eq 0 ];then
echo "该用户已存在"
#将经过用户筛选(已存在)的用户,将它们shadow密码信息赋予变量res
res=$(cat /etc/shadow |grep "$name" |awk -F: '{print $2}')
#判断用户们的密码是否存在空或则是”!!“的情况,代表密码为空
if [ "$res" = '!!' -o -z "$res" ]
then
echo "该用户并未创建密码,开始创建密码"
read -p "请输入 $name 的密码:" key1
read -p "请再次输入密码,进行确认:" key2
[ "$key1" = "$key2" ]
[ $? -eq 0 ]&&echo $key1 |passwd --stdin $name||echo "两次密码输入不一致!"
else
echo "$name 用户已经创建密码"
fi
else
echo "该用户不存在,正在建立中。。。"
useradd $name &>/dev/null
read -p "请输入 $name 的密码:" key1
read -p "请再次输入密码,进行确认:" key2
[ "$key1" = "$key2" ]
[ $? -eq 0 ]&&echo $key1 |passwd --stdin $name||echo "两次>密码输入不一致!"
fi
done