Loading

Linux随堂1

 第一次随堂测试:所有脚本编写完成后,打包成“学号_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

 

以下是我执行后的路径下文件内容

 

posted @ 2021-12-03 10:57  丘野  阅读(163)  评论(0编辑  收藏  举报