Shell常见基础问题
2021-07-10 本文已影响0人
一个小运维
1 如何执行一个未设置x权限的Shell脚本?
以下三种方式任选其一:
sh 脚本文件路径
source 脚本文件路径
. 脚本文件路径
2 自定义Shell变量时,变量名有什么规则?
可以包括数字、字母、下划线,不能以数字开头
变量名区分大小写
赋值时等号两边不要有空格
尽量不要使用关键字和特殊字符
给同一个变量多次赋值时,最后一次的赋值生效
3 简述预定义变量$$、0、*、$!的作用。
$$ 保存当前运行进程的(PID)号
$? 保存命令执行结果的(返回状态)
$0 保存当前运行的(进程名)或(脚本名)
$# 保存位置变量的(个数)
$* 保存所有位置变量的(值)
$! 保存后台(最后一个进程)的PID号
4 简述三种定界符在变量赋值操作中的特点。
双引号 " ":允许扩展,以 $ 引用其他变量
单引号 ' ':禁用扩展,即便 $ 也视为普通字符
反撇号 ` `:将命令的执行输出作为变量值
5 计算根分区的磁盘使用率,百分比精确到2位小数。
参考答案
执行df命令可列出已挂载的文件系统使用情况:
[root@svr5 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 51606140 4292504 44692196 9% /
tmpfs 502204 228 501976 1% /dev/shm
/dev/sda1 495844 34880 435364 8% /boot
/dev/mapper/VolGroup-lv_home 28455944 586380 26424088 3% /home
.. ..
可以看到根分区的使用率为9%,百分比不带小数位。
手动计算时,可以用Used栏的已用量除以1K-block栏的总量乘以100,即可获得准确的百分比。结果涉及到小数,因此可以使用bc工具来实现。
[root@svr5 ~]# echo 'scale=2;4292504*100/51606140' | bc
8.31
即当前根分区的准确使用率为8.31%。
6 列出常见的整数值比较操作,并说明各自作用。
* -eq 等于(Equal)
* -ne 不等于(Not Equal)
* -ge 大于或等于(Greater or Equal)
* -le 小于或等于(Lesser or Equal)
* -gt 大于(Greater Than)
* -lt 小于(Lesser Than)
7 运用条件测试操作,检查当前的用户是否为root。
[root@svr5 ~]# [ $USER == "root" ] && echo "yes" || echo no
yes
[root@svr5 ~]# su - mike
[mike@svr5 ~]$ [ $USER == "root" ] && echo "yes" || echo no
no
8 编写uaddfor.sh脚本,根据用户名列表快速添加用户账号。
需要添加的账号名称保存在/root/users.txt文件中,每行一个用户名。要求在执行uaddfor.sh脚本后,能够为这些用户名快速添加好系统账号,并将登录密码设置为1234567。
1)准备测试用的账号列表文件
[root@svr5 ~]# vim /root/users.txt
linzhiying
guotao
tianliang
2)编写uaddfor.sh脚本文件
[root@svr5 ~]# vim uaddfor.sh
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "1234567" | passwd --stdin $UNAME &> /dev/null
done
[root@svr5 ~]# chmod +x uaddfor.sh
3)测试、验证执行效果
[root@svr5 ~]# tail -3 /etc/passwd
linzhiying:x:527:527::/home/linzhiying:/bin/bash
guotao:x:528:528::/home/guotao:/bin/bash
tianliang:x:529:529::/home/tianliang:/bin/bash
9 编写sumwhile脚本,计算从1-100之间所有整数的和。
1)编写sumwhile.sh脚本文件
[root@svr5 ~]# cat sumwhile.sh
#!/bin/bash
sum=0 ; i=1
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo "1-100的总和是:$sum"
[root@svr5 ~]# chmod +x sumwhile.sh
2)测试、验证执行效果
[root@svr5 ~]# ./sumwhile.sh
1-100的总和是:5050
10 简述Linux服务脚本中的case分支结构。
Linux服务脚本通常利用$1位置变量来获取控制参数,并结合case分支来做出不同的响应,典型的结构如下:
case "$1" in //检查第一个位置参数
start)
echo "启动服务.. .." ;; //启动服务的语句块
stop)
echo "停止服务.. .." ;; //停止服务的语句块
restart)
$0 stop //停止服务
$0 start //启动服务
;;
*)
echo $"用法: $0 {start|stop|restart}" //提示正确用法
exit 1
esac
11 简述定义一个Shell函数的两种方法。
方法1:
function 函数名 {
命令序列
.. ..
}
方法2:
函数名() {
命令序列
.. ..
}
12 简述Shell环境常见的中断及退出控制指令。
break:跳出当前所在的循环体,执行循环体后的语句。
continue:跳过循环体内余下的语句,重新判断条件以便执行下一次循环。
exit:退出脚本,默认返回值是 0。