7. for循环¶
7.1 for写法1¶
for num in `seq 10`
do
echo $num
done
for num in 1 2 3 4 5 6 7 8 9 10
for num in {1..10}
7.2 for写法2¶
类c语言编程风格
for ((num=1;num<=10;num++))
do
echo $num
done
改编成while循环
i=1
while ((i<=10))
do
echo $i
((i++))
done
7.3 获取当前目录及子目录所有文件名脚本¶
yum install tree -y
#!/bin/bash
for file in `ls /opt`
do
echo $file
done
脚本
vim for_list_file.sh
#!/bin/bash
function list_file(){
for file in `ls $1`
do
dir_or_file=$1"/"$file
if [ -d "$dir_or_file" ];then
list_file $dir_or_file
else
echo $dir_or_file
fi
done
}
list_file $1
7.4 批量重命名脚本¶
#rename命令的用法
rename all ALL allfile.txt
rename批量修改文件名
vim for_rename.sh
#!/bin/bash
cd /tmp/my_shell/
for file in `ls . |grep -E "*.txt"`
do
rename "txt" "log" $file
done
sed批量修改文件名
vim for_sed.sh
#!/bin/bash
cd /tmp/my_shell/
for file in `ls *.txt`
do
mv $file `echo $file |sed 's/666/888/g'`
done
更简单的操作
rename "888" "" /tmp/my_shell/*.txt
7.5 99乘法表¶
vim for_99table.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
for ((b=1;b<=9;b++))
do
if [[ a -ge b ]];then
echo -n -e "$b * $a = $[a*b]\t"
fi
done
echo ""
done
7.6 mysql分库备份脚本¶
忘记mysql数据库密码怎么办?
#1.修改配置文件
vim /etc/my.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
#2.重启mariadb
systemctl restart mariadb
#3.登录mysql
#4.修改密码
update mysql.user set authentication_string=password('cpu123456') where user='root' and host='localhost';
flush privileges;
mysql快捷使用命令
mysql -uroot -p123456 -e "show databases;"|sed "1d"
脚本
vim mysql_table_bak.sh
#!/bin/bash
MYUSER=root
MYPWD=123456
DBPATH=/mysql_db_backup/
MYCMD="mysql -u$MYUSER -p$MYPWD"
MYDUMP="mysqldump -u$MYUSER -p$MYPWD"
[ ! -d "$DBPATH" ] && mkdir $DBPATH
for dbname in `$MYCMD -e "show databases;"|sed '1d'|egrep -v "mysql|schema"`
do
mkdir ${DBPATH}/${dbname}_$(date +%F) -p
for table in `$MYCMD -e "show tables from $dbname;"|sed '1d'`
do
$MYDUMP $dbname $table |gzip > $DBPATH/${dbname}_$(date +%F)/${dbname}_${table}.sql.gz
done
done
7.7 面试题:批量创建系统账号密码¶
随机数
echo $RANDOM #0~32767
md5加密
echo "$RANDOM"|md5sum |cut -c3-11
echo "chupeng"|md5sum
脚本
vim for_user_pwd.sh
#!/bin/bash
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
. $lsb_functions
else
log_success_msg()
{
echo " SUCCESS! $@"
}
log_failure_msg()
{
echo " ERROR! $@"
}
fi
user="chupeng"
pwdfile="/tmp/my_pwd.file"
for num in `seq -w 10`
do
pwd="`echo $RANDOM|md5sum|cut -c3-11`"
useradd $user$num &>/dev/null && echo -e "$user$num:$pwd">>$pwdfile
if [ $? -eq 0 ];then
log_success_msg "$user$num is success create."
else
log_failure_msg "$user$num is not create."
fi
done
#批量设置密码
chpasswd < $pwdfile
#查看一次密码后清空密码文件
cat $pwdfile && > $pwdfile
root@4c16g:/shell-scripts# vim for-user-pwd.sh
root@4c16g:/shell-scripts#
root@4c16g:/shell-scripts# bash for-user-pwd.sh
* chupeng1 is success create.
* chupeng2 is success create.
7.8 md5文件内容校验¶
#1.生成校验文件的md5值
md5sum /etc/passwd > /tmp/pwd.md5
#查看md5值
cat /tmp/pwd.md5
#2.md5校验
md5sum -c /tmp/pwd.md5
#3.新建用户
useradd chupeng11
#4.重新md5校验
md5sum -c /tmp/pwd.md5
给md5sum加盐(chupeng)
for((i=1;i<=10;i++));do echo "chupeng$RANDOM"|md5sum|cut -c 3-11;done
通过系统自带的uuid获取唯一随机数
cat /proc/sys/kernel/random/uuid
破解md5sum
#1.生成所有随机数及其md5sum校验值,写入文件
vim create_random_md5sum.sh
#!/bin/bash
for num in {0..32767}
do
echo "`echo $num|md5sum` $num" >>/tmp/my_random_md5sum.db
done
开发检索脚本
vim find_md5sum.sh
#!/bin/bash
#查找“4fe8bf20ed”出处
md5char="4fe8bf20ed"
while read line
do
if [ `echo $line|grep $md5char|wc -l` -eq 1 ];then
echo "congratulations,you find it : $line"
break
fi
done</tmp/my_random_md5sum.db
最后更新:
2022-02-19 13:59:07