shell 相关面试题

1. 命令行传入1个字符或数字,数字等于1则显示1,如 果等于2则显示2,如果既不等于1也不等于2,就显示 输入不对,然后退出程序

**项目分析: **

    1. 输入数字
    1. 数字等于1 显示1 退出
    1. 数字等于2 显示2 退出
    1. 数字不是1 也不是2 显示帮助 退出
方法一:
#!/bin/bash
num=$1
[ $# -ne 1 ] &&{
echo "Usage: input number"
exit 1
}
[ $num -eq 1 ] &&{
echo 1
exit 0
}
[ $num -eq 2 ] &&{
echo 2
exit 0
}
[ $num -ne 1 -a $num -ne 2 ]&&{
echo "Usage: input number"}
exit 1
}
#!/bin/bash
num=$1
[ $# -ne 1 ] &&{
echo "Usage: input number"
exit 1
}
[ $num -eq 1 ] &&{
echo 1
exit 0
}
使用正则表达式
[ $num -eq 2 ] &&{
echo 2
exit 0
}
[[ $num =~ ^[12]$ ]] || { echo "Usage: input number" exit 1 }

2. 开发shell脚本,使用传参或read实现比较2个整 数大小,用条件表达式(禁止用if) 进行判断并输出到 屏幕方式提醒用户结果.

注意: 用两种方式实现的时候, 需要对变量是否为数字及参数个数是否正确给 予提示
项目分析: read /传参

  • 判断参数个数是否为2 注意:read命令 的时候 不需要对比命令行参数
  • 参数或变量是否是数字 进行比较
#!/bin/bash
read -p '请输入2个参数:' n1 n2
num1=$n1
num2=$n2
[[ "$num1" =~ ^[0-9]+$  && "$num2" =~ ^[0-9]+$ ]] || {
echo "Usage:$0 num1 num2"
exit 1
}
[ $num1 -eq $num2 ] && {
echo "$num1 == $num2"
exit 0
}
[ $num1 -gt $num2 ] && {
echo "$num1 > $num2"
exit 0
}
[ $num1 -lt $num2 ] && {
echo "$num1 < $num2"
exit 0
}

3.把计算器脚本 修改为if判断格式

#!/bin/bash
num1=$1
num2=$2
[ $# -ne 2 ]&&{
echo "Usage:$0 num1 num2"
exit 1
}
expr $num + $num2 + 2 &>/dev/null
[ $? -ne 0 ] && {
echo "Usage:$0 num1 num2"
exit 2
}
echo $num1 + $num2 |bc -l
echo $num1 - $num2 |bc -l
echo $num1 / $num2 |bc -l
echo $num1 \* $num2 |bc -l

4.企业案列 监控系统可用内存, 小于100M就发送报警邮件 否则,提示内存充足 定时任务每三分钟一次

**项目分析

  • 取出当前内存
  • 书写脚本进行对比
    -- 小于发邮件
    -- 正常 提示正常
  • 定时任务
#!/bin/bash
mail=$(free  -m|awk 'NR==2{print $NF}')
if [ "$mail" -gt "400" ]
then
 echo "内存充足"
else
 echo "内存不足"
 mail -s "内存不足" [email protected]
fi
定时任务
#*/3 * * * *  sh /server/scripts/men.sh &>/dev/null

5.书写脚本 常用监控内容

目标 使用命令
服务器本地端口监控 ss/netstat lsof
远端端口监控 telnet /nc /nmap
进程 ps -ef ps aux 检查cron
客户端模拟监控:看返回值或者看返回 字符串 curl/wget 只监控静态页面(更加深入lnmp)
数据库 mysql -uroot -poldboy123 -e 'select version();'

检查端口是否开启

[root@m01 /server/scripts]# ss -lntup |grep -w 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=7266,fd=3))
tcp    LISTEN     0      128      :::22                   :::*                   users:(("sshd",pid=7266,fd=4))

你可能感兴趣的:(shell 相关面试题)