本文链接 https://www.jianshu.com/p/40c21584f3c2
1. 写出执行脚本的几种方式,并且说明执行是需要具备的必要条件
2. 看下面的代码,回答最后一个命令的输出,并说名原因
[root@sharkyun ~]# name=QF
[root@sharkyun ~]# bash
[root@sharkyun ~]# name=千锋云计算
[root@sharkyun ~]# exit
exit
[root@sharkyun ~]# echo $name
子 shell 的 变量 不会传递给父 shell
3. 你能写出在 shell 中定义变量时需要遵循的规则吗?
4. 写出几个你知道的 Linux 系统中的 环境变量
$HOME
$USER
$PWD
5. 如何将一个自定义变量声明为 环境变量,并说出环境变量和自定义变量有什么比较明显的区别
export 变量名
6. 写出在 shell 脚本中 $?
$$
$!
${#name}
分别代表的意义?
7. 在 shell 脚本中 $0
$2
分别指的是什么?
8. 目前有个一个 shell 脚本,脚本的路径是 /home/shark/bin/qf.sh
, 希望每周一到周五的凌晨 2 点钟 执行 一次。该如何做?
9. if
判断语句结构,有几种?写出可以判断情况最多的语句结构
10. 如何测试 一个路径是 普通文件?如何测试一个目录是否存在?如何测试一个变量被定义了非空的值?
11. 已知如下文件内容,写出 获取网卡名以及这个网卡对应的 IP 和 Mac 地址的代码或命令
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:93:78:e1 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.100/24 brd 192.168.122.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe93:78e1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
old=$IFS
IFS=$'\n'
#inf=$(cat ip.txt |grep -v 'inet 127'|grep -E 'link/ether|inet ' |tac)
inf=$(ip a |grep -v 'inet 127'|grep -E 'link/ether|inet ' |tac)
for item in $inf
do
if [[ "$item" =~ inet ]];then
net_name=$(echo $item | awk '{print $8}')
net_ip=$(echo $item | awk '{print $2}')
echo "NET_NAME: $net_name | NET_IP: $net_ip"
else
net_mac=$(echo $item | awk '{print $2}')
echo "NET_MAC: $net_mac"
fi
done
export IFS=$old
o=$IFS
IFS=$'\n'
for line in $(cat ip.txt |grep -v 'inet 127' |grep -E 'link/ether|inet ' |tac)
do
if [[ "$line" =~ link ]];then
mac=$(echo $line | awk '{print $2}')
else
ip=$(echo $line | awk '{print $2}')
name=$(echo $line | awk '{print $NF}')
fi
if [ ! -z "$mac" -a ! -z "$ip" ];then
echo "NAME: $name | IP: $ip | Mac: $mac"
fi
done
export IFS=$o
12. 有如下命令的输出,写出获取丢包率的代码或命令
0% packet loss
就是丢包率,这里是 0,注意只要数字部分,不要%
[root@kube-master ~]# ping -c2 www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=56 time=3.15 ms
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=56 time=2.80 ms
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 2.802/2.976/3.151/0.182 ms
13. 写出 awk 的语法格式
14. 如何把 /usr/local/python/bin
添加到环境变量 PATH
中,要求在当前环境中立刻生效,且以后永久生效。
15. 已知程序目录 /opt/cmdb/log/
下有以 .log
结尾的日志文件,日志文件每天一个,格式如下 2019-09-01.log
, 现在只希望保留 10 天的日志,把 10 天之前的日志压缩打包后,备份到 远程服务器 10.3.134.186
的 /backup/
目录下, 远程服务器的用户使用 back
默认已经建立了互相,请写出具体代码。
16. 写出匹配日期格式 YYYY-MM-DD
的正则表达式
[root@sharkyun ~]# echo "2019-12-30" |egrep '[1-9][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[01])'
2019-12-30
[root@sharkyun ~]# echo "1919-12-30" |grep -E '[1-9][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[01])'
1919-12-30