Linux shell编程作业

作业1

编写脚本exe1,该脚本接收一个命令行参数,并根据其类型做以下操作:

  1. 若参数为普通文件,则显示其内容
  2. 若参数为压缩文件,则解压缩(如同目录下有同名文件则放弃)
  3. 若参数为目录,则将其归档并压缩(如已有同名压缩文件则放弃)
  4. 若参数不存在,给出错误提示并退出
#!/bin/bash

str=$1
len=${#str}
let len=$len-3

if [ -e $1 ]
then
        if [ -f $1 ]
        then
                if [ ${str:$len:3} = ".gz" ]
                then
                        gzip -d $1
                else
                        cat $1
                fi
        elif [ -d $1 ]
        then
                file=$1".tar.gz"
                if [ ! -e $file ]
                then
                        tar -czvf $file $1
                fi
        fi

else
        echo "No such file! Error!"
fi

注意:

  1. test语句的空格
  2. 引用参数要写$
  3. 整数计算,要用let操作
  4. 用{}进行的变量操作不需要$引用,只需要写变量名
  5. elif也要加then

作业2

编写脚本exe2,由用户输入一组数(以end表示输入结束),输出这些数的和,结果保留2位小数。要求使用函数做输入类型检查,并给出错误提示信息。

#!/bin/bash

if_is_legal(){
        if  [[ $1 = [0-9]*\.[0-9]* ]] || [[ $1 = [0-9]*[^.a-zA-Z]  ]] || [[ $1  = [0-9] ]]
        then
                return 0
        else
                return 1
        fi
}
read num
sum=0

while [ $num != "end" ]
do
        if  if_is_legal $num
        then
                sum=$(echo "$sum+$num" | bc)
        else
                echo "type error! please input again!"
        fi
        read num
done
echo "scale=2;$sum/1.0" |bc

注意:

  1. 函数如何传参
  2. 函数返回值的写法
  3. 浮点运算的写法

作业3

编写脚本exe3,该脚本对比两个目录dir1和dir2(通过参数给出),将dir2中符合下列条件的文件复制到dir1,并将每一条复制记录存储到文件record中:

  1. 该文件不在dir1中
  2. 该文件比dir1中的同名文件更新
#!/bin/bash

for item in `ls $2`
do
        echo $item
        if [ -e $1"/"$item ]
        then
                if [ $2"/"$item -nt $1"/"$item ]
                then
                        cp $2"/"$item $1
                        echo "replace $item in $1" >> record
                fi
        else
                cp $2"/"$item $1
                echo "copy $item from $2 to $1" >> record
        fi
done
echo "done successfully!"

注意:

  1. 文件名的拼接
  2. for循环的使用
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LINUX/UNIX Shell编程作业Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。 可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示: root:x:0:0:root:/root:/bin/bash zxj:x:500:500:zxj303:/home/zxj:/bin/bash . . . 在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 1、 在屏幕上显示当前所有用户的记录 2、 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 3、 只在屏幕上显示用户名和用户ID 4、 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 5、 查询并显示特定用户的记录 6、 往passwd文件里增加新的用户记录 7、 从passwd文件里删除某个用户记录 你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。
  在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本(shell)程序能实现增加、删除、查找和显示特定用户信息的功能。你们可以通过创建一些UNIX/LINUX shell 脚本文件来满足以上需求。   可以用任意一个文本编辑器打开passwd文件,该文件里包含用冒号分隔开的字段组成的记录,如下所示:   root:x:0:0:root:/root:/bin/bash   zxj:x:500:500:zxj303:/home/zxj:/bin/bash    . .   在主Shell脚本文件里(必须以 menu 命名)要有一个多操作选项的菜单以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能: 在屏幕上显示当前所有用户的记录 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 只在屏幕上显示用户名和用户ID 只在屏幕上显示(经过格式化和排序的)用户名和用户ID 查询并显示特定用户的记录 往passwd文件里增加新的用户记录 从passwd文件里删除某个用户记录   你可以使用UNIX/LINUX中一些比较简单的命令或命令组合来执行1、2、3、4、5的任务。对于任务6和7,你需要编写单独的Shell脚本文件(必须分别命名为add和delete)并且在你的主脚本menu文件中调用这些脚本文件。   可能你还需要查询一些Unix/Linux命令,比如awk,、sort、tr、cut、paste、sed、grep;你也可能还需要查询其他的Unix/Linux命令。   建议你在主目录下建立一个以 xx xx xx(xx xx xx为学号)命名的目录,并且在本次作业中使用它作为工作目录。 主脚本文件中的菜单   在menu脚本文件里将创建如下菜单,菜单里包含供用户选择的一些操作。 用户信息主菜单 打印当前所有记录 打印当前所有记录(格式化后的) 打印用户名和用户ID 打印(格式化了的)用户名和用户ID 查询特定记录 增加新记录 删除记录 Q——退出 你的选择是:(等待用户输入)   当用户做了选择且所选的操作完成之后,应再次显示主菜单以供用户做下一步选择。你必须用while循环和case条件语句配合来完成此操作。另外在显示主菜单前必须先清除用户屏幕。在以下所有步骤中,当显示主菜单前都需要先清屏。   在menu脚本文件的前面部分你首先要定义三个变量,这三个变量分别存放passwd、add、delete文件的文件名,并且能在所有涉及到passwd、add、delete文件的语句中使用他们。 比如,可以定义成:           record_file=passwd   在所有访问passwd文件的语句中,只要使用 $record_file 即可。这样做的一个优点就是,如果以后你需要重新命名记录或者需要在不同的记录文件中使用你的脚本的话,你只需要修改以上一个语句而不须在所有有关的记录文件里逐一修改语句。如下定义另外两个变量:   add_file=add   delete_file=delete   定义以上变量之后,你必须核对menu脚本文件,看看所需的文件(passwd、add、delete)是否准确存放在当前目录下。如果其中任何一个不存在,你的脚本menu文件就必须显示以下信息,然后退出:   Required file theMissingFile does not exist.(所需文件不存在)   比如,如果passwd文件不存在,就显示“Required file passwd does not exist.(所需文件记录不存在)”然后退出。   在以上等待用户做出选择的菜单中,如果用户偶尔输入了一个代码而不是1、2、3、4、5、6、7或Q,就有信息提示“无效的代码,请按回车键继续``````”(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。可以允许用户使用Q或q退出。   在以上等待用户做出选择的菜单中,如果用户简单地按了回车键(而不是输代码)的话,就会出现信息“Selection not entered. Press Enter to continue…"(务必保证光标停留在此信息行末尾而不是在下一行的开始处)。等用户按了回车键之后,再次显示主菜单供用户做其他选择。   当用户选择了第一项——打印当前所有用户记录   以下是当用户在主菜单中选择第一个选项后,menu脚本文件输出的内容的例子:    (此处是主菜单—略) 你的

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值