1: 描述 Linux shell 中单引号、双引号及不加引号的简单区别
单引号:所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就输出什么。
双引号:把双引号里面的内容给输出出来,如果内容中有命令、变量等,会先把,变来那个、命令解析出结果,然后输出最终内容。
无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格等特殊字符,则不能完整输出,需要改加双引号。一般连续的字符串,数字,路径等可以用,不过最好用双引号,替代之。
2: 写一个脚本将某目录下大于 100k 的文件移动至 /tmp 下
for i in `find /data/test -type f -size +100k`
do
cd /data/test && mv $i /tmp
done
3: 写一个脚本进行 nginx 日志统计,得到访问 ip 最多的前 10 个(nginx 日志路径:/home/logs/nginx/default/access.log
awk '{a[$1]++}END{for (j in a) print a[j],j}' /home/logs/nginx/default/access.log | sort -nr | head -10
4: 写一个脚本把指定文件里的 /usr/local 替换为别的目录
sed 's:/user/local:/tmp:g' filename
5: 写一个脚本,实现批量添加 20 个用户,用户名为 user01-20,密码为 user 后面跟 5 个随机字符
#!/bin/bash
#description: useradd
for i in `seq -f"%02g" 1 20`
#-f"%02g" 可以实现输出 01-20
do
useradd user$i
echo "user$i-`echo $RANDOM | md5sum | cut -c 1-5`" | passwd -stdinuser$i > /dev/null 2>&1
done
6: 写一个脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些,能 ping 通则认为在线
#!/bin/bash
for ip in `seq 1 255`
do
ping ‐c 1 10.18.193.$ip > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo 10.18.193.$ip UP
else
echo 10.18.193.$ip DOWN
fi
done
wait
7: 写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入 Q 或者 q 无视错误并退出或者通过 vim 打开这个指定的脚本或者输入其他任意键退出检测,假如没错误则输出没错误的信息
#!/bin/bash
read -p "请指定要检测的脚本 ‐> " file
if [ -f $file ]
then
sh -n $file > /dev/null 2>&1
if [ $? -ne 0 ]
then
read ‐p "你检测的 $file 有语法错误,[选择 q 或 Q 退出检测,或者输入 vim 进行脚本的修改]" answer
case $answer in
q | Q )
exit 0
;;
vim )
vim $file
;;
* )
exit 0
;;
esac
else
echo "经检测,此脚本在语法上没问题!"
fi
else
echo "$file 不存在,无法检测!"
exit 1
fi
8: 写脚本将当前目录所有文件扩展名改为 log
#!/bin/bash
for file in `ls ./ | grep -P "(.*)(\..*)"`
do
echo $file | mv $file `echo ${file%.**}`.log
done