admin 管理员组

文章数量: 887629


2024年2月7日发(作者:天津编程培训班线下)

linuxshell脚本编程练习作业及答案(全)

本人乃一介草民,刚学shell编程不久,一日见有人发题求助,所以自己也当作练习来练练手,写的不好请勿吐槽,可与本人交流,一起学习!!

(1)创建用户

批量创建1000个用户

用户名为:班级+学号+昵称;每个班为一个组群

能够自动删除所创建的用户

每成功创建或删除一个用户,在屏幕上显示用户名

(题目中这用户,也太tm多了点,没有达到题目的全部要求,还是水平有限啊!!)

#!/bin/bash

#this is programe to build users batch

echo "how many users you want to add"

read -p "input the numbers of users: " num

count=1

while [ $count -le $num ]

do

useradd -G class1 std$count

echo "user std$count del successfully"

count=$(($count + 1))

done

read -p "what do you want to do: " do

let count=count-1

case $do in

d)

for(( count; count >= 1;count-- ))

do

userdel -r std$count

echo "user std$count del successfully"

done

;;

*) exit;;

esac

##################################################

(2)创建目录和文件,

目录名为:dir1, dir2, …, dir10

每个目录下分别新建10个文本文件,文件名为:目录名+file1~10

并设置每个文件的权限:

文件所有者:读+写+执行

同组用户:读+执行

其他用户:读+执行

等待键盘输入一个数字,范围为1~10

重命名该级目录(假设输入数字为“5”,则为“dir5”目录)下所有文件的扩展名为bak,并将该目录下所有文件名保存到一个文本文件

删除包含该数字的所有目录和文件

#!/bin/bash

#test 2

for((i=1;i<=10;i++))

do

mkdir /root/tmp/dir$i

cd /root/tmp/dir$i

chmod 755 -R . #这有个(.)代表当前文件夹

a=1

while [ $a -le 10 ]

do

touch dir${i}file$a

let a=a+1

done

done

read -p "which directory you want chage:" num

cd /root/tmp/dir$num

for s in `ls /root/tmp/dir$num`

do

mv $s $

done

ls /root/tmp/dir$num >../out

rm -rf /root/tmp/*${num}*

##################################################

(3)备份文件

l 每天18:00归档/etc目录下的所有文件,归档文件名为如下形式:

etc-YYYY-MM-DD;保存在/home/user/backup目录下,其中user为当前登录用户名

需要编写一个脚本,放到/etc/cron.d/script :

vi script

#!/bin/bash

DATE=`date +%F`

tar -cvf /etc-$DATE /etc

mkdir /home/$USER/backup

mv /etc-$DATE /home/$USER/backup

#结束,保存

chmod +x script

crontab -e

00 18 * * * /etc/cron.d/script

##################################################

同上差不多

l 每天8:00压缩/etc目录下的所有内容,压缩文件名为如下形式:etc-YYYY-MM-DD;存放在/home/user/tar目录下,其中user为当前登录用户名

l 每周日17:00归档/home下每个目录,归档文件名为如下形式:dir-YYYY-MM-DD;保存在/tm

p/YYYYMMDD目录下

##################################################

(4)查找统计

l 查看/etc/passwd中所有包含字符串“aa”的用户,并将结果保存在文本文件中

grep "aa.*" /etc/passwd|cut -d: -f1 >file

l 查看/bin中包含字符串“ls”的文件名,并将结果保存在文本文件中

ls /bin|grep "ls.*" >file

l 把/bin和/sbin下的文件名保存到文件commandview中

ls /bin /sbin >commandview

l 统计/bin和/sbin下的文件数量

ls /bin |wc -l

ls /sbin|wc -l

##################################################

真心不会 只知道ps top

(5)进程管理

l 显示系统正在运行的所有进程

l 显示当前终端正在运行的所有进程

应该是: ps -H

l 显示root正在运行的所有进程

l 以优先级-16后台启动一个进程“find / -name ls* > tmp &”

l 显示该进程信息

ps -ef |grep find

l 修改该进程的优先级

renice

l 杀掉该进程

kill id

##################################################

(6)系统信息

显示当前登录的用户名

whoami

显示系统中所有用户名

cut -d ":" -f1 /etc/passwd

显示本机名

hostname

显示本机操作系统的名称、版本

cat /etc/issue

显示文件系统信息

df -h

显示当前系统状态信息

##################################################

(7)加减乘除运算,其中

l 两个操作数和一个运算符由位置参数给出

l 在屏幕上分别显示操作数、运算符和运算结果

#!/bin/bash

#test 7

read -p "input first num: " var1

read -p "input +-*/ : " var

read -p "input second num: " var2

v=`echo "scale=2; $var1 $var $var2 "|bc`

echo "$var1 $var $var2 = $v"

##################################################

(8)按照运行结果编写Shell程序:

0

101

21012

3210123

432101234

54321012345

6543210123456

765432101234567

87654321012345678

987654321

#!/bin/bash

#test 8

i=0

for(( i; i <= 9; i++ ))

do

j=$i

for(( i; i >= 0; i-- ))

do

echo -n "$i"

done

a=1

while [ $a -le $j ]

do

echo -n "$a"

let a=a+1

done

echo " "

i=$j

done

##################################################

(9)逆序输出一个字符串

#!/bin/bash

#test 9

read -p "input chars : " char

rev $char

##################################################

(10)冒泡法对10个数按升序排序

#!/bin/bash

#test 10 冒泡法输出

i=0

for m in "$@"

do

a[i]=$m

let i=i+1

done

# $#随意多个位置参数都可以进行排序,具体到n个参数,则改为n

for (( i = 0; i <= $# ; i++ ))

do

for(( j=1+i; j <= $# ; j++ ))

do

if [[ ${a[i]} -gt ${a[j]} ]]

then

t=${a[i]}

a[$i]=${a[j]}

a[$j]=$t

fi

done

done

echo "${a[@]}" #不换行输出

#如果要换行输出用下面语句:

f

or k in "${a[@]}"

do

echo $k

done

~

##################################################

(11)编写1个menu的Shell程序,执行后的界面为:

NumberNameFor Linux Menu

1exitleave

2viedit a file

3datedate

4calcalendar

5wholist the users

6lslist the files in this directory

7catdisplay a file on the screen

Please input a number or a name for the action you wish:

(有点差异,绞尽脑汁也不知道怎么改的跟上面一样:)

echo "NumberNameFor Linux Menu"

select var in "exitleave" "viedit a file" "datedate" "calcalendar"

"wholist the user" "

lslist the files in this directory" "catdisplay a file on the

screen"

do

break

done

echo "please input a number or a name for the action you

wish:"

echo "your choose is $var"

##################################################

(12)求n的阶乘,n=100

方法1:

#!/bin/bash

a=1

for(( i=1; i <= 100; i++ ))

do

a=$[ $i * $a ]

done

echo "100!=$a"

#我的电脑100!输不出来,可能是出题目的有点脑残,考算法直接用10就可以嘛!!

方法2(递归)(可以求任意数的阶乘,但是。。100!还是输不出啊):

function func

{

if [ $1 -eq 1 ];then

echo " 1"

else

local i=$[ $1 - 1 ]

local j=`func $i`

a=`echo "scale=3; $1 * $j"|bc`

echo $a

fi

}

read -p "input a num: " m

n=`func $m`

echo "$m! = $n"


本文标签: 目录 显示 用户 文件 名为