shell练习题

16.shell练习题

  • (1) 什么是解释性语言?什么是编译型语言?
    解释性语言依赖于解释器,每次执行都需要经过解释器解析然后形成机器可执行的代码 运行速度较慢
    编译型语言在执行之前需要编译成机器可识别的文件然后再交给机器去执行,只需要一次编译就可以到处运行 运行速度较快
  • (2).写一个脚本输入任意数组或则数字例如 2 3 4 5 6 7 8 9,输出最大值、最小值、平均值
[root@haibao class26-shell]# cat -n num01.sh 
	1	#!/bin/bash
	2	
	3	max=$1
	4	min=$1
	5	arr=$@
	6	sum=0
	7	for i in $arr
	8	do
	9	        if [ $i -gt $max ]
	10	        then    
	11	                max=$i
	12	        fi
	13	        if [ $i -lt $min ]
	14	        then
	15	                min=$i
	16	        fi
	17	        sum=$[sum+i]
	18	done
	19	echo "最大值是$max"
	20	echo "最小值是$min"
	21	echo "平均值是$[$sum/$#]"
	22	echo "带小数的平均值是$(echo "scale=2; $sum/$#" | bc)"
[root@haibao class26-shell]# bash num01.sh 12 34 9
最大值是34
最小值是9
平均值是18
带小数的平均值是18.33
数组方式
	#!/bin/bash

	arr=$1
	arr1=()
	num=0
	for i in ${arr[*]}
	do
		arr1[$num]=$i
		num=$[num+1]
	done
	echo ${arr1[*]}
	max=${arr1[0]}
	min=${arr1[0]}
	for i in ${arr1[@]}
	do
		echo $i
		if [ $i -gt $max ]
		then
			max=$i
		fi
		if [ $i -lt $min ]
		then
			min=$i
		fi
		sum=$[$sum+$i]
	done
	echo "最大值为$max"
	echo "最小值为$min"
	echo "平均值为$[$sum/${#arr1[@]}]"
[root@haibao class26-shell]# bash num02.sh "${arr1[*]}"
	6 4 6 25 44
	6
	4
	6
	25
	44
	最大值为44
	最小值为4
	平均值为17
	[root@haibao class26-shell]# vim num02.sh
	[root@haibao class26-shell]# echo ${arr1[*]}
	6 4 6 25 44
  • (3).写一个脚本输入任意数组或则数字例如 2 4 3 5 9 7 8 6,按照从小到大排序后输出
#!/bin/bash
#DESC:写一个脚本输入任意数组或则数字例如 2 4 3 5 9 7 8 6,按照从小到大排序后输出
#NAME=work3.sh
#...
arr=()
i=0

for value in "$@"
do
	arr[$i]=$value
	i=$[ $i+1 ]
done

echo ${arr[*]}
for ((i=0;i<${#arr[@]};i++))
do
	for ((j=$i;j<${#arr[@]};j++))
	do
		tmp=${arr[$i]}
		if [ ${arr[$j]} -lt $tmp ]
		then
		arr[$i]=${arr[$j]}
		arr[$j]=$tmp
		fi
	done
done

echo ${arr[@]}	
  • (4).完成/root/shell_test/文件夹下完成一个脚本
    1).判断aaa.txt文件是否存在,存在则往文件中写入bbb,如果不存在,创建aaa.txt文件,往文件中写入bbb
    2).每一分钟执行一次脚本
#!/bin/bash
:<<EOF
完成/root/shell_test/文件夹下完成一个脚本 (今天)
	1.判断aaa.txt文件是否存在,存在则往文件中写入bbb,如果不存在,创建aaa.txt文
件,往文件中写入bbb
	2.每一分钟执行一次脚本
EOF
if [ -e aaa.txt ]
then
	echo "bbb" >> aaa.txt
else
	touch aaa.txt
	echo "bbb" >> aaa.txt
fi
定时任务
* * * * * /bin/bash /root/class26-shell/file01.sh  在centos6 中可以执行 centos7不行
  • (5).判断/root/class21/inittab.txt文件是否大于100行,如果大于,则显示”inittab is a big"
#!/bin/bash
:<<EOF

(4).判断/root/class21/inittab.txt文件是否大于100行,如果大于,则显示”inittab is a big" (今天)
EOF

filename=$1
num=`cat $filename | wc -l`
if [ $num -gt 100 ]
then
	echo "innitab is a big "
else
	echo "file is small"
fi
  • (6).写出一个脚本程序,给定一个文件,比如:/root/class21/inittab.txt

​ a、判断这个文件中是否有空白行?

​ b、如果有,则显示其空白行的总行数,否则显示没有空白行

 	1	#!/bin/bash
     2	
     3	:<<EOF
     4	写出一个脚本程序,给定一个文件,比如:/root/class21/inittab.txt 
     5		a、判断这个文件中是否有空白行? b、如果有,则显示其空白行的总行数,否则显示没有空白行
     6	EOF
     7	filename=$1
     8	num=`grep "^$" $filename | wc -l`
     9	if [ $num -gt 0 ]
    10	then
    11		echo "有空行,空行数为$num"
    12	else
    13		echo "没有空行"
    14	fi
    num=`awk -v sum=0 '/^$/{sum+=1}END{print sum}' 文件名称`
    num=`awk '/^$/{print NR}' num01.sh | wc -l`
  • (7).给定一个文件,如果是普通文件,就显示出来,如果是目录文件,也显示出来,否则就显示“无法识别”
#!/bin/bash
:<<EOF
	给定一个文件,如果是普通文件,就显示出来,如果是目录文件,也显示出来,否则就显示“无法识别”
EOF

filename=$1
if [ -f $filename ]
then
	echo "是一个文件"
elif [ -d $filename ]
then
	echo "是一个目录"
else
	echo "无法识别"
fi
  • (8).写一个脚本,给脚本传递3个参数 两个数字,一个运算符,根据运算符计算出结果,例如 2 3 - 2-3=1 (使用case语句)
#/bin/bash
:<<EOF
	写一个脚本,给脚本传递3个参数 两个数字,一个运算符,根据运算符计算出结果,例如 2 3 -   2-3=1 (使用case语句)
EOF

num1=$1
num2=$2
fuhao=$3
case $fuhao in
	"+")
	echo $[num1+num2]
	;;
	"-")
	echo $[num1-num2]
	;;
	"\*")
	echo $[num1*num2]
	;;
	"/")
	echo $[num1/num2]
	;;
	*)
	echo "啥也不是"
	;;
esac
  • (9).使用脚本完成批量创建用户创建(100个用户例如 ljh1~ljh100 )今天完成
#!/bin/bash
:<<EOF
	使用脚本完成批量创建用户创建(100个用户例如 ljh1~ljh100 )
EOF

for((i=1;i<=2;i++))
do
	useradd "zsb$i"
	name=zsb$i
	echo "123456" | passwd --stdin $name ##这里是给用户赋初识密码 
	num=$[num+1]
done
  • (10).创建脚本检查软件包是否安装 (今天完成)
#!/bin/bash
:<<EOF
创建脚本检查软件包是否安装
EOF

app=$1

ischeck=`rpm -qa | grep $app`

if [ $ischeck ]
then
	echo "已经安装"
else
	echo "没有安装"
fi
  • (11).编写脚本打印99乘法表
#!/bin/bash
num=9
for((i=1;i<=$num;i++))
do
	for((j=1;j<=$i;j++))
	do
		printf "$j*$i=$[i*j]\t"
	done
	echo
done
  • (12).编写函数实现取出ip地址 (今天完成)
#!/bin/bash
function getId()
{
	echo `ifconfig | grep Bcast |cut -d : -f 2 |cut -d " " -f 1`
	echo `ifconfig | grep Bcast | awk -F ":" '{print $2}' | awk -F " " '{print $1}'`
}

getId
  • (13)定期清理/data/YY-MM-DD.tar.gz的文件 (今天完成)
    • 描述:在系统的/data/目录下,仅工作日周一至周五每天会自动生成文件YY-MM-DD.tar.gz(压缩文件名会以时间命名因此压缩文件不会重复)
    • 要求:希望只保留最近2天的文件 无论过几个节假日/data仍然会有前两个工作日的备份文件
ls -t /data | awk '{NR>2}' | xargs rm -rvf
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值