问题:使用Linux命令查询file.txt中空行所在的行号
awk '/^$/{print NR}' file1.txt
问题:有文件file2.txt内容如下: 求一列的和
张三 40
李四 50
王五 60
awk '{sum+=$2} END{print "求和"sum}' file2.txt
问题:Shell脚本里如何检查一个文件是否存在?
if [ -e /root/file1.txt ]; then echo "文件存在"; else echo "文件不存在"; fi
问题:用shell写一个脚本,对下列无序的一列数字排序,并求和
9
8
7
6
5
4
3
2
10
1
sort -n file3.txt | awk '{sum+=$1; print $1} END{print "求和: "sum}'
问题:查找当前文件夹(/root)下所有的文本文件中包含有字符”123”的文件名称?
grep -r "123" /root | cut -d ":" -f 1| sort -u
问题: 批量生产指定数目的文件,文件名采用"纳秒"命名
#!/bin/bash
read -t 30 -p "请输入创建文件的数目:" n
test=$(echo $n | sed 's/[0-9]//g') #检测非数字输入
if [ -n "$n" -a -z "$test" ] #检测空输入
then
for ((i=0;i<$n;i=i+1 ))
do
name=$(date +%N)
[ ! -d ./temp ] && mkdir -p ./temp
touch "./temp/$name"
echo "创建 $name 成功!"
done
else
echo "创建失败"
exit 1
fi
问题: 将/root/temp目录下所有文件名重命名为"旧文件名-递增数字"?
#!/bin/bash
filenames=$(ls /root/temp)
number=1
for name in $filenames
do
printf "命令前:%s" ${name}
newname=${name}"-"${number}
rename $name ${newname} /root/temp/*
let number++ #每个改名后的文件名后缀数字加1
printf "重命名后:%s \n" ${newname}
done
问题: 根据users.txt中提供的用户列表,一个名一行, 批量添加用户到linux系统中
准备数据users.txt
user1
user2
#!/bin/bash
ULIST=$(cat /root/users.txt) ##/root/users.txt 里面存放的是用户名,一个名一行
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
[ $? -eq 0 ] && echo "$UNAME用户名与密码添加初始化成功!"
done
问题: 根据给出的数据输出里面单词长度大于3的单词
echo "I may not be able to change the past, but I can learn from it."
| awk -F "[ ,.]" '{for(i=1;i<NF;i++){ if(length($i)>3){print $i}}}'
问题 1、按单词出现频率降序排序
awk -F "[,. ]" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}' file8.txt | sort -rn
2、按字母出现频率降序排序
awk -F "" '{for(i=1;i<=NF;i++)S[$i]++}END{for(key in S)print S[key],key}'
file8.txt | sort -rn
问题: 扫描192.168.56.1到192.168.56.254之间ip的是否存活, 并输出是否在线?
#!/bin/bash
count=0
for i in 192.168.56.{1..254}
do
# 使用ping命令发送2个包测试, 并获取返回接收到包的个数
receive=$(ping $i -c 2|awk 'NR==6{print $4}')
# 接收返回包大于0 说明主机在线
if [ ${receive} -gt 0 ]
then
echo "${i} 在线"
let count+=1
else
echo "${i} 不在线"
fi
done
echo "在线服务器有:"$count"个"
面试题:MySQL分库备份
#!/bin/sh
user=root #用户名
pass=root #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass" #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
do
printf '正在备份数据库:%s' ${db_name}
$dump $db_name 2>/dev/null |gzip >${backfile}/${db_name}_$(date +%m%d).sql.gz #库名+时间备份打包至指定路径下
printf ',备份完成\n'
done
echo "全部备份完成!!!"
面试题:MySQL数据库分库分表备份
#!/bin/sh
user=root #用户名
pass=root #密码
backfile=/root/mysql/backup #备份路径
[ ! -d $backfile ] && mkdir -p $backfile #判断是否有备份路径
cmd="mysql -u$user -p$pass" #登录数据库
dump="mysqldump -u$user -p$pass " #mysqldump备份参数
dblist=`$cmd -e "show databases;" 2>/dev/null |sed 1d|egrep -v "_schema|mysql"` #获取库名列表
echo "需要备份的数据列表:"
echo $dblist
echo "开始备份:"
for db_name in $dblist #for循环备份库列表
do
printf '正在备份数据库:%s\n' ${db_name}
tables=`mysql -u$user -p"$pass" -e "use $db_name;show tables;" 2>/dev/null|sed 1d`
for j in $tables
do
printf '正在备份数据库 %s 表 %s ' ${db_name} ${j}
$dump -B --databases $db_name --tables $j 2>/dev/null > ${backfile}/${db_name}-${j}-`date +%m%d`.sql
printf ',备份完成\n'
done
printf '数据库 %s 备份完成\n' ${db_name}
done
echo "全部备份完成!!!"