最近Linux快期末考试了,自己也复习的差不多就顺便分享几个常见的编程题目
目录
- 1、编写shell脚本,将v1=1,v2=2相加,结果保存为V3并显示输出
- 2、编写shell脚本,添加一个新组为 class1,然后添加属于这个组的30个用户,用户名的形式为 stdxx,其中xx从01到30
- 3、编写shell脚本,实现两个变量之间的加减乘除运算
- 4、编写shell脚本,在 /userdata目录下建立 50 个目录,即 user1 ~ user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行
- 5、编写shell脚本,计算1~100的和
- 6、编写shell脚本,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下
- 7、编写shell脚本,输入三个数并进行升序排序
- 8、编写shell脚本,输入一个数字n并计算1~n的和,同时要求如果输入的数字小于1,则重新输入,直到输入正确的数字为止
- 9、编写shell脚本,把字符串反过来显示。例如:给定abcde输出edcba
- 10、编写shell脚本,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下
- 11、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
1、编写shell脚本,将v1=1,v2=2相加,结果保存为V3并显示输出
#!/bin/bash
v1=1
v2=2
V3=$(($v1+$v2))
echo $V3
2、编写shell脚本,添加一个新组为 class1,然后添加属于这个组的30个用户,用户名的形式为 stdxx,其中xx从01到30
#!/bin/bash
#因为不知道class1组是不是存在,保险起见我就先删了再创建一个awa
groupdel calss1
groupadd class1
for ((i=1;$i<=30;i++))
do
if [ $i -le 9 ];then
username=stu0$i
else
username=stu$i
fi
useradd $username
usermod -g class1 $username
done
3、编写shell脚本,实现两个变量之间的加减乘除运算
#!/bin/bash
result=0
read -p "请输入第一个数:" a
read -p "请输入第二个数:" b
read -p "请输入运算符号:" c
if [ $c = "+" ];then
result=$(($a+$b))
echo " $a $c $b = $result "
elif [ $c ="-" ];then
result=$(($a-$b))
echo " $a $c $b = $result "
elif [ $c = "*" ];then
result=$(($a*$b))
echo " $a $c $b = $result "
elif [ $c = "/" ];then
result=$(($a/$b))
echo " $a $c $b = $result "
fi
4、编写shell脚本,在 /userdata目录下建立 50 个目录,即 user1 ~ user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行
#先判断,如果/userdata目录不存在就创建一个
if [ ! -e /userdata ];then
mkdir /userdate
fi
for ((i=1;i<=50;i++))
do
username=user$i
mkdir -p /userdate/$username
chmod 754 $username
done
5、编写shell脚本,计算1~100的和
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
sum=$(($sum+$i))
done
echo "$sum"
6、编写shell脚本,判断一文件是不是字符设备文件,如果是将其拷贝到/dev目录下
#!/bin/bash
read fname
if [ -c $fname ];then #判断是否为字符设备文件用-c选项
cp $fname /dev
fi
7、编写shell脚本,输入三个数并进行升序排序
#i/bin/bash
#三个数,两两比较一次就可以了
t=0
read a
read b
read c
if [ $a -gt $b ];then
t=$a
a=$b
b=$t
fi
if [ $a -gt $c ];then
t=$a
a=$c
c=$t
fi
if [ $b -gt $c ];then
t=$b
b=$c
c=$t
fi
echo "$a $b $c"
8、编写shell脚本,输入一个数字n并计算1~n的和,同时要求如果输入的数字小于1,则重新输入,直到输入正确的数字为止
#!/bin/bash
sum=0
read “请输入一个数字:” n
While [ $n -lt 1 ]
do
read “请输入一个数字:” n
done
for ((i=1;i<=n;i++))
do
sum=$(($sum+$i))
done
echo “$sum”
9、编写shell脚本,把字符串反过来显示。例如:给定abcde输出edcba
#!/bin/bash
read -p “请输入字符:” char
echo $char|rev
10、编写shell脚本,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序fileback存放在/usr/bin目录下
#首先编写备份文件的脚本fileback.sh
#!/bin/bash
if [ ! -e "/root/bak" ];then
mkdir /root/bak
fi
cd /root/bak
yy=$(date +%Y)
mm=$(date +%m)
dd=$(date+%d)
name="$yy$mm$dd"_etc.tar.gz
tar -czvf $backupdir /etc
#然后编写任务定时器
crontab -e
0 0 1 * * /root/usr/bin/fileback.sh
11、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4:50删除/abc目录下的全部子目录和全部文件
crontab -e
50 16 * * * rm -rf /abc
(2)从早800到下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内
0 8-18/1 * * * awk '{print $1}' /xyz/x1 >> /backup/bak01.txt
#由于前面经过crontab -e已经创建完任务定时处理文件了,所以就不再创建
#8-18/1中的斜杠就是在上午8点到下午6点之间每一小时进行操作的意思
#awk '{print $1}'就是打印/xyz/x1中的第一列(域)的内容
#然后>>是重定向操作,将前面打印的内容追加到/backup/bak01.txt中
(3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz
50 17 * * 1 tar -czvf backup.tar.gz /date
(4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc)
55 17 * * * umount /dev/hdc
(5)在早晨8:00前开机后启动
0 0-8 * * * reboot
最后,如果答案有误还请指正😀