第一次随堂测试:所有脚本编写完成后,打包成“学号_Test1.tar”文件,用scp命令上传到222.195.136.184服务器。命令如下:
scp ./学号Testl .tar Linux2021@222.195.136. 184:~/Test 1
随堂笔记
把两个PPT的知识点整理复习,Linux课程笔记 · 语雀 (yuque.com)
先看我整理的笔记,再看题目的代码。
题目&解题
Ubuntu 18.xxx上,以下代码执行正常。
1.
在all_bash_ scripts 文件夹下,编写脚本把文件夹下大于300KB的可执行文件全部复制到与all_bash_scripts 文件夹呈并列关系的以当前系统日期命名的文件夹中。
提示:需要使用if语句,for 循环语句,date, awk, ls, cp等命令。
(1)t1.sh
设all_bash_ scripts文件夹在当前执行路径下。
参考:
shell脚本如何判断文件大小 - 最最么么哒 - 博客园 (cnblogs.com) awk命令获得文件大小
Linux awk 命令 | 菜鸟教程 (runoob.com)
Linux date命令 | 菜鸟教程 (runoob.com)
#!/bin/bash
# 当前路径
pwdpath=$( pwd )
# 目标扫描目录
target_dir="all_bash_scripts"
# 准备存储的日期目录,使用date命令
date_dir=$( date '+%Y-%m-%d')
# 和当前路径拼接获得全路径
datepath="${pwdpath}/${date_dir}"
targetpath="${pwdpath}/${target_dir}"
# 如果目标扫描目录不存在,则退出
if [ ! -e $targetpath ]; then
echo 'all_bash_scripts folder dont exist'
exit 1
fi
# 如果日期目录不存在,则创建
if [ ! -e $datepath ]; then
mkdir "$datepath"
fi
# 遍历扫描目录下文件
targetfiles=$( ls ${targetpath} )
for filename in ${targetfiles} ; do
# 获得全路径
file="$targetpath/${filename}"
# 获得文件大小,test判断执行中必须使用&&表示与,而不能使用-a
size=0
test -f "${file}" && size="$( du -k $file | awk '{print $1}' )" #get size of current file if it is
# 判断是否属于可执行文件,且文件大小是否大于300k
if [ -x "$file" -a "${size}" -gt 300 ]
then
# 拷贝
cp $file "$datepath/${filename}"
fi
done
2
编写一一个脚本,其名字为stars_ display.sh,根据后接num显示星星三角阵。提示:使用for循环语句
stars_display 5 * ** *** **** *****
(2)stars_ display.sh
#!/bin/sh i=1 while [ ${i} -le $1 ]; do j=1 while [ ${j} -le ${i} ]; do echo -n "*" j=$(( ${j} + 1 )) done echo "" i=$(( ${i} + 1 )) done
q@q-VirtualBox:~/work/chapter4$ sh star_display.sh 3 * ** *** q@q-VirtualBox:~/work/chapter4$ sh star_display.sh 5 * ** *** **** *****
3.
创建一个名为test_ files的文件夹,在其里面创建10个文件
2021-11-01.dat
2021-11-02.dat
2021-11-03.dat
2021-11-04.dat
2021-11-05.dat
2021-11-06.dat
2021-11-07.dat
2021-11-08.dat
2021-11-09.dat
2021-11-10.dat
然后,请使用文本过滤器与for 循环语句,编写脚本将11月5日-9日的文件挑出来,放入一个与test_ files 呈并列关系的名字为picked_ files 的文件夹里
参考
grep的使用 (41条消息) shell文本过滤器之grep_南瓜啊的博客-CSDN博客
(3)file_filter.sh
以下两个文件放在同一目录下,先执行t3_create再执行t3脚本。
t3_create.sh创建相应文件
#!/bin/bash pwdpath=$( pwd ) testpath="${pwdpath}/test_files" if [ ! -e "${testpath}" ]; then mkdir "${testpath}" fi for i in 1 2 3 4 5 6 7 8 9 do touch "${testpath}/2021-11-0${i}.dat" done touch "${testpath}/2021-11-10.dat"
t3.sh完成题目要求
#!/bin/bash # 使用文本过滤器选出5-9日的文件 target=$( ls ./test_files | grep '2021-11-0[5-9].dat' ) # 准备保存的文件夹,无则建 pickdir="./picked_files" if [ ! -e "${pickdir}" ] ; then mkdir "${pickdir}" fi # 遍历目标文件复制 for file in ${target}; do mv "./test_files/${file}" "${pickdir}/${file}" done
4.
编写一个脚本,其名字为calculator.sh,具有如下4种功能:
calculator.sh plus num1 num2 num3 (功能: num 1+num2+num3)
calculator.sh minus numl num2 num3 (功能: num l-num2-num3)
calculator.sh multiply numl num2 num3 (功能: numl * num2 * num3)
calculator.sh divide num l num2 num3 (功能: numl / num2 / num3)
其中,numl ,num2与num3为任意实数,但进行除法时,分母不能为零。
(4)calculator.sh
除零问题待完善
#!/bin/sh # case判断语句、脚本变量、数值计算 case $1 in "plus") echo $(($2+$3+$4));; "minus") echo $(($2-$3-$4));; "multiply") echo $(($2*$3*$4));; "divide") echo $(($2/$3/$4));; esac
以下是我执行后的路径下文件内容