1.写出以下Shell特殊位置参数变量的含义(5分)
$0 获取脚本的名字,包含路径
$n $n(n=任意数字)代表脚本在命令行的第几个参数
$# 获取脚本参数的个数
$* 获取当前shell脚本所有传参的参数,如果不加引号作用同$@相同,
如果加上双引号"$*"则表示将所有的参数视为单个字符串 相当于"$1$2$3"
$@ 获取当前shell脚本所有传参的参数,不加引号同$*相同,加上双引号则
表示把所有的参数视为不同的独立的字符串
$? 获取执行上一个指令执行状态返回值0为成功,非0为失败
$$ 获取当前shell脚本的进程号PID
$! 获取上一个在后台工作脚本进程的进程号PID
2.如何定义环境变量(5分)
临时的:export declare -x
永久放入:/etc/profie /etc/bashrc
3.定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?应该怎么用?(5分)
不加引号:一般纯数字,简单连续的字符串也可以
单引号:所见即所得,看见什么就输出什么
双引号:默认是双引号,连续的字符串数字混合在一起,解析变量
反引号:解析命令
4.写出下面特殊变量扩展的意义(5分)
${abin} 输出变量的内容,对变量有保护作用
${#abin} 输出变量的长度
${url#*.} 从前往后删除匹配最短的任意开头的字符到.的内容
${url##*.} 从前往后删除匹配最长的任意开头的字符到.的内容
${url%.*} 从后往前删除匹配最短的结尾是开头的内容
${url%%.*} 从后往前删除匹配最长的结尾是.开头的内容
5.数值的整数和小数运算有哪几种方式(5分)
小数:awk bc
整数:expr $(()) $[] let 1+1
6.写出下面条件测试的含义(5分)
[-e dir|file] 存在则为真
[-d dir] 目录是否存在
[-f file] 文件是否存在
[-r file] 文件是否有读权限
[-x file] 文件是否有执行权限
[-w file] 文件是否有写权限
7.写一条判断语句,如果/tmp/abin.txt文件不存在则进行创建(5分)
[-f /tmp/abin.txt]||touch /tmp/abin.txt
8.查看磁盘/当前使用状态,如果使用率超过80%则把结果输出到/var/log/disk.err(5分)
[root@abin /server]# cat cp.sh
#!/bin/sh
##create abin 2020-6-24
Disk_Use=$(df -h|grep '/$'|awk '{print $5}'|awk -F% '{print $1}')
if [ $Disk_Use -ge 80 ]
then
echo "Disk IS use ${Disk_Use}" >/tmp/log/disk.err
fi
9.脚本批量创建10个用户,密码统一为123,需要对用户输入是否为数字和输入的名字是否为空做判断(5分)
[root@abin /server]# cat yh.sh
#!/bin/sh
##create abin 2020-6-24
read -p "请输入创建用户个数" num
if [[ !$num = ~^[0-9]+$ ]]
then
echo "Pleease Input 数字"
exit 1
fi
read -p "请输入用户名前缀" prefix
if [[ -z $prefix ]]
then
echo "Please Input 前缀"
exit 2
fi
for i in `seq "$num"`
do
USER=$prefix$i
useradd $USER
echo "123"|passwd --stdin $USER &>/dev/null
if [ $? -eq 0 ] ;then
echo "$USER is create ok"
fi
done
10.猜数字游戏,随机输出一个1-100的数字,要求用户输入数字(数字处加判断)
如果比随机数小则提示比随机数小了,大则提示比随机数大了正确则退出,错误则继续死循环 最后统计猜了多少次(5分)
[root@abin /server]# cat csz.sh
#!/bin/sh
##create abin 2020-6-24
num=$(echo $((RANDOM%100+1)))
#echo $num
i=1
while true
do
read -p "Please Input number:1-100:" num1
if [ !$num1 = ~^[0-9]+$ ]
then
echo "Please Input number:1-100"
continue
fi
if [ $num1 -lt $num ];then
echo "你输入的数字小了"
elif [ $num1 -gt $num ];then
echo "你输入的数字大了"
elif [ $num -eq $num ];then
echo "猜中了"
break
fi
let i++
done
echo "一共猜了$i次"
11.打印一个菜单如下,然后循环加case语句输出用户输入菜单选项的结果(5分)
h 显示命令帮助
f 显示登录信息
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
[root@abin /server]# cat caidan.sh
#!/bin/sh
##create abin 2020-6-24
caidan(){
cat <<EOF
--------------------------
h 显示命令帮助
f 显示登录信息
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
--------------------------
EOF
}
caidan
while true
do
read -p "请输入你想查看系统状态对应码[d/m/u/q]:" sys
case "$sys" in
h)
clear
caidan
;;
f)
clear
w
;;
d)
clear
df -h
;;
m)
clear
free -m
;;
u)
clear
uptime
;;
q)
break
;;
*)
echo "error"
exit 1;
esac
done
12.用case语句写出nginx启动脚本
[root@abin /server]# cat nginx.sh
#!/bin/sh
##create abin 2020-6-24
#manager Nginx start stop restart reload
source /etc/init.d/functions
act=$1
te(){
if [ $? -eq 0 ];then
action "Nginx Is $act" /bin/true
else
action "Nginx Is $act" /bin/false
fi
}
start(){
/usr/sbin/nginx &>/dev/null
te
}
stop(){
/usr/sbin/nginx -s stop &>/dev/null
te
}
reload(){
/usr/sbin/nginx -s reload
te
}
status(){
Ngx_status=$(ps aux|grep "[n]ginx"|grep master|awk '{print $2}')
Nginx_Status_Port=$(netstat -lntup|grep nginx|awk '{print $4}')
echo "Nginx_status_Pid:$Ngx_status"
echo "Nginx_status_Port:$Nginx_Status_Port"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
reload)
reload
;;
status)
status
;;
*)
echo "Usage:$0{start|stop|status|restart|reload|}"
esac
13.写一个脚本探测10.0.0.1-254之间存活的主机,输出到ip.txt
[root@abin /server]# cat ip.sh
#!/bin/sh
##create abin 2020-6-24
for n in {1..254}
do
{
ping 10.0.0.$n -c 1 &>/dev/null
if [ $? -eq 0 ]
then
echo "10.0.0.$n is alive"
echo "10.0.0.$n" >>/server/ip.txt
fi
} &
done
14.写出下列shell内置命令
exit 退出整个程序
break 结束当前循环
continue 忽略本次循环剩余的代码,直接进行下一次循环
15.写出普通数组和关联数组定义的两种方式(5分)
普通数组:只能使用整数 作为数组索引
关联数组:可以使用字符串 作为数组索引
array=(1 2 3) array=(1 2 3 "test"[10]=abin)
declare -A array
16.如何查看数组array元素的索引和元素的总个数
echo ${!array[*]}
echo ${#array[*]}
17.写一个数组脚本统计/var/log/nginx.log里ip访问次数(5分)
awk '{print $1}' /var/log/nginx/access.log|sort|uniq -c
18.统计下面这句话中字母数不大于6的单词(至少两种方式)(5分)
I am abin teacher welcome to www.abins.cn.
[root@abin /server]# cat tj.sh
#!/bin/sh
##create abin 2020-6-24
array=(I am abin teacher welcome to www.abins.cn.)
for n in ${array[*]}
do
if [ ${#n} -lt 7 ]
then
echo $n
else
continue
fi
done
19.计算从1加到100之和(5分)
[root@abin /server]# cat j.sh
#!/bin/sh
##create abin 2020-6-24
w=0
for n in `seq 100`
do
let w=w+n
done
echo $w
20.使用for循环在/abin目录下通过随机小写10个字母加固定字符串abin批量创建10个html文件。把上面创建的文件abin字符串改为cxt(5分)
未完续...