第十周练习-脚本部分

1、写一个脚本

(1) 能接受四个参数:start, stop, restart, status

start: 输出“starting 脚本名 finished.”

(2) 其它任意参数,均报错退出;

#!/bin/bash
#
case $1 in
start)
    echo "starting $0 finished"
    ;;
stop)
    echo "stopping $0 finished"
    ;;
restart)
    echo "restarting $0 finished"
    ;;
status)
    echo "status $0 finished"
    ;;
*)
    echo "Usage:$(basename $0){start|stop|restart|status}"
    exit 1
    ;;
esac

2、写一个脚本,判断给定的用户是否登录了当前系统;

(1) 如果登录了,则显示用户登录,脚本终止;

(2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash
#
method() {
    status=$(who | grep $1)
    if [[ -n "$status" ]];then
        touch /tmp/online
    fi
}
while true;do
    method $1 && sleep 3
    if [ -f /tmp/online ];then
        echo "$1 is online"
    else
        echo "$1 isn't online"
    fi
    rm -f /tmp/online
done

3、写一个脚本,显示用户选定要查看的信息;  cpu) display cpu info  mem) display memory info  disk) display disk info  quit) quit  非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash
#
cat <<EOF
    输入mem>display memory info
    输入disk>display disk info
    按Q>退出
EOF
read -p ‘请按对应的字母键,否则五秒后自动退出’ -t 5 name
if [[ "$name" == "Q" ]];then
    echo "您选择退出";
    exit 1
elif [[ "$name" == "cpu" ]];then
    cat /proc/cpuinfo
elif [[ "$name" == "mem" ]];then
    df -lh
elif [[ "$name" == "disk" ]];then
    fdisk -l
else
    echo "您输入有误,请重新选择"
    bash $0
fi

4、写一个脚本

(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

(2) 提示用户输入一个用户名或输入“quit”退出;

当输入的是用户名,则调用函数显示用户信息;

当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
#
doing() {
    read -p "请输入用户名或quit退出" name
    if [[ "$name" == "quit" ]];then
        exit 0
    else
        userinfo $name
    fi
}
userinfo() {
    id $1 &> /dev/null
    if [ $? -eq 0 ];then
        grep -E ^$1 /etc/passwd | awk -F: '{print $3,$NF}'
        doing
    else
        echo "user not exist"
        exit
    fi
}
doing

5、写一个脚本,完成如下功能(使用函数)

(1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

(2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

(3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

#!/bin/bash
#
doing() {
    mkdir -p /mnt/sysroot
    read -p "请输入一个可执行命令" name
    which $name &> /dev/null
    if [ $? -eq 0 ];then
        path=$(which $name)
        ldd $path
        echo "==========开始复制命令文件=========="
        new_command_path=$(echo ${path%/*})/
        cp -r $path /mnt/sysroot/$new_command_path &> /dev/null
        echo "==========复制命令文件完毕=========="
        echo "==========开始复制命令依赖的库文件=========="
        mkdir -p /mnt/sysroot/$new_command_path/$name-lib
    for i in $(ldd $path);do
        cp $i /mnt/sysroot/$new_command_path/$name-lib &> /dev/null
    done
        echo "==========复制命令依赖的库文件完毕=========="
    else
        echo "the command not found"
        exit 1
    fi
}
doing

原创文章,作者:N24_涩味,如若转载,请注明出处:http://www.178linux.com/65454

(0)
N24_涩味N24_涩味
上一篇 2016-12-31
下一篇 2016-12-31

相关推荐

  • 20160809作业

    一、如何设置tab缩进为4个字符       临时设置:set tabstop=4       全局设置vim /etc/vimrc—>添加set tabstop=4       当前用户生效,手动添加文…

    Linux干货 2016-08-10
  • Linux Shell(脚本)编程入门

    为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建…

    Linux干货 2017-08-05
  • 自制linux与内核编译

    自制Linux系统 1分区并创建文件系统 fdisk/dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根/ mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdb2 2挂载boot mkdir/mnt/boot mount /dev/sdb1 /mnt/boot ? 3安装grub grub-i…

    Linux干货 2016-09-13
  • n28 第二周作业

    n28 第二周作业

    Linux干货 2017-12-09
  • awk的进阶

    前言 awk的中有很多的控制语句,awk也支持if语句,while语句,for语句等等编程逻辑充的控制语句及数组、函数。 awk的进阶无非就是多练。 1.控制语句 (1)if-else语句 语句格式: if(condition) {statments}    if  (条件) 条件为真 执行{statments} 只有一个语句可…

    Linux干货 2016-06-26
  • Linux磁盘管理(分区,格式化,文件系统、VFS、mount、fstab)

    Linux系统中数据存储在磁盘中,磁盘在冯诺依曼体系中属于输入输出外部存储对象,保存着重要的企业数据,对Linux系统中的磁盘管理尤其需要熟练掌握,由于企业目前使用的主流存储设备还是硬盘,所以这里只叙述硬盘的组织结构; 1.分区:    (1)低级格式化:       硬盘在出厂的时候厂家会做一次分区格式化,…

    Linux干货 2016-09-02

评论列表(1条)

  • 马哥教育
    马哥教育 2017-01-04 16:20

    写的很好,下次可以把一次作业写在一个里面