Linux shell脚本练习题汇总

Linux shell脚本练习题汇总

  1. 编写脚本文件example1.sh,存放在/home/cauc/scripts目录下。脚本功能为:查找某文件是否存在(以参数形式),若存在,则将其权限设置为用户主可读可改,其他人无任何权限。否则则返回无此文件的信息。
#!/bin/bash
if [ -e $1 ]
then
	chmod 600 $1
else
	echo "The file $1 does not exist"
fi
  1. 编写脚本文件leapyear.sh,存放在/home/cauc/scripts目录下。脚本功能为:判断给定的某一年是否是闰年。
#!/bin/bash
echo "Input a year number:"
read year
let "leap=$year%4==0&&$year%100!=0||$year%400==0"
if [ $leap -eq 0 ]
then
	echo "$year is not a leap year"
else
	echo "$year is a leap year"
fi
  1. 打印给定行数的*号。第一行打印1个,第二行打印2个,等等。行数由用户在命令行上输入。
#!/bin/bash
for((i=0;i<$1;i++))
do
	for((j=0;j<=i;j++))
	do
		echo -n "*"
	done
	echo ""
done
  1. 编写脚本文件sum.sh,存放在/home/cauc/scripts目录下。脚本功能为:计算从1加到100的和并返回结果。
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
	s=$(($s+$i));
done
echo "the sum is:$s"
  1. 编写 shell脚本,参数为一个大于 20 的正整数。先检查参数是否符合要求。如果不
    符合要求,请给出提示;如果符合要求,输出这个参数的平方。
#!/bin/bash
if [ $1 -gt 20 ]
then
	echo "$(($1*$1))"
else
	echo "number is wrong"
fi
  1. 编写 shell脚本, 首先显示当天日期, 然后查找给定的用户是否在系统中工作(who 命令)。 如果在系统中,就输出一条欢迎语句(例如 hello, ****!);如果不在系统中,就输出一条语句(waiting for ***!)
#!/bin/bash
date
if who|grep "^$1"
then
	echo "hello,$1!"
else
	echo "waiting for $1!"
fi
  1. 编写 shell脚本,该脚本接受一个参数。 若给定参数不是目录, 则给出提示信息;
    否则使用 ll 命令列出该目录下的内容,并输出有多少个子目录(d 开头),多少个普通文件(-开头)。
#!/bin/bash
if [ -d $1 ]
then
	ls -l $1
	echo -n "d:"
	ls -l $1|grep "^d"|wc -l
	echo -n "-:"
	ls -l $1|grep "^-"|wc -l
else
	echo "$1 does not existence"
fi
  1. 编写shell脚本, 将第一个参数指定的内容 copy 到第二个参数指定地点。
    若第一个参数是目录, 自动添加-r 选项(即把目录下的所有内容都 copy 过去);
    若第一个参数是普通文件,则将其 copy 到指定地点;
    若第一个参数指定的文件或目录不存在,则报错;
    若第二个参数指定的文件或目录已经存在,则提示是否替换,若选择 yes,则先删除原来的文件或目录, 然后再执行 copy 操作, 否则放弃。
#!/bin/bash
if [ -e $1 ]
then
	if [ -e $2 ]
	then
		echo "replace?[yes/no]"
		read ans
		if [ $ans=="yes" ]
		then
			if [ -d $1 ]
			then
				cp -r $1 $2
			else
				cp $1 $2
			fi
		fi
	else
		if [ -d $1 ]
		then 
			cp -r $1 $2
		else
			cp $1 $2
		fi
	fi
else
	echo "error!"
fi
  1. 编写 shell脚本。 检查命令行的第一个参数是否是-b 或者-s。 如果是-b,则计算由
    第二个参数指定的文件中以 b 开头的行数。如果是-s,则计算由第二个参数指定的文件中
    以 s 开头的行数。 否则显示选择有错的信息。
#!/bin/bash
case $1 in
-b) count = `grep ^b $2 | wc -l`
 echo “The number of lines in $2 that start with b is $count.”;;
-s) count = `grep ^s $2 | wc -l`
 echo “The number of lines in $2 that start with s is $count.”;;
*) echo “Theoption is not recognized”;;
esac
  1. 编写shell脚本。 该脚本需要输入两个文件的名称, 然后由用户选择相应的操作(若
    两个参数中任何一个不是普通文件, 则报错):
    cat: 输出两个文件的内容;
    statistic: 统计两个文件分别有多少行
    merge:将第 1 个文件的内容合并到第 2 个文件后面;
    copy:将第 1 个文件的内容 copy 到第 2 个文件(第 2 个文件原有内容被覆盖);
    bye:退出。
#!/bin/bash
if [[ -f $1 && -f $2 ]] 
 then
 echo “please chose your cat, statistic, merge, copy, or bye.”
 read chose
 case $chose in
 cat) cat $1 $2;;
 statistic) echo `wc -l $1`
 echo `wc -l $2`;;
 merge) cat $1 >> $2;;
 copy) cat $1 > $2;;
 bye) break;;
 esac 
 else
 echo "$1 or $2 is not file" 
fi
  1. 编写 shell脚本, 利用 for 循环将当前目录下的.c 文件移动到指定的目录下, 完成
    后显示指定目录下的文件内容, 并按文件从小到大排序。 (ll -r -S)
#!/bin/bash
for i in `ls|grep -E "*.c"`
do
	mv $i $1
done
ls -l -r -S $1
  1. 编写 shell脚本, 显示 Fibonacci 数列的前 10 项及其总和。
#!/bin/bash
a=1
b=1
sum=2
cnt=4
echo -n -e "$a\t$b"
while [ $cnt -gt 0 ]
do
	let "a=a+b"
	let "b=a+b"
	let "sum=sum+a+b"
	let "cnt=cnt-1"
	echo -n -e "\t$a\t$b"
done
echo ""
echo "sum=$sum"
  1. 编写shell脚本, 判断给定的参数是否是素数。(假定大于2)
#!/bin/bash
flag=0
if 
for (( i=2; i<=$1/2;i++ ))
do
	if (($1%i==0))
	then
		flag=1
		break
	fi
done
if [ flag -eq 1 ]
then
	echo $1 is not a prime number
else
	echo $1 is a prime number
fi

14)编写shell脚本,将给定的参数转换成二进制表示。

#!/bin/bash
a=0
b=$1
c=1
sum=0
while [ $b -gt 0 ]
do
	let "a=b%2"
	let "b=b/2"
	let "sum=sum+a*c"
	let "c=c*10"
done
echo "$sum"
  1. 假设存在一个的文件夹(作为参数), 其中包含一个 studentlist.csv 的文件,当
    中存放了若干学生的学号,每个一行。 例如:
    150341101
    150341102
    150341105
    150341106
    编写shell脚本,查看/homework 文件夹下学生是否提交了作业, 假设作业名的格式为:学号_homework.txt。最后输出没提交作业的学号名单。
#!/bin/bash
cd $1
for i in `cat studentlist.csv`
do
	str="_homework.txt"
	file=$i$str
	if [ -f $file ]
	then
		echo "$i yes"
	else
		echo "$i no"
	fi
done

有不同意见欢迎留言讨论!

  • 8
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值