第九周練習

1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;

#!/bin/bash
#
nologin=$(awk -F: '$NF=="/sbin/nologin"{print $NF}' /etc/passwd | wc -l)
all=$(cat /etc/passwd | wc -l)
login=$[$all-$nologin]
echo "login user:$login,nologin user:$nologin"

2、寫一個腳本

(1) 獲取當前主機的主機名,保存于hostname變量中;

(2) 判斷此變量的值是否為localhost,如果是,則將當前主機名修改為www.magedu.com;

(3) 否則,則顯示當前主機名;

#!/bin/bash
#
hostname=$(hostname)
if [[ "$hostname" == "localhost" ]];then
    hostname www.magedu.com
else
    echo $hostname
fi

3、寫一個腳本,完成如下功能

(1) 傳遞一個磁盤設備文件路徑給腳本,判斷此設備是否存在;

(2) 如果存在,則顯示此設備上的所有分區信息;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter,please try it again"
    exit 1
fi
for i in $*;do
    if [[ -a $i ]];then
        fdisk -l $i
    else
        echo "the path is not existing or not a block special"
    fi
done

4、寫一個腳本,完成如下功能

腳本能夠接受一個參數;

(1) 如果參數1為quit,則顯示退出腳本,并執行正常退出;

(2) 如果參數1為yes,則顯示繼續執行腳本;

(3) 否則,參數1為其它任意值,均執行非正常退出;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
if [[ "$1" == "quit" || "$1" == "QUIT" ]];then
    echo "This script is quiting"
    exit 0
elif [[ "$1" == "yes" || "$1" == "YES" ]];then
    echo "This script is still running"
else
    exit 2
fi

5、寫一個腳本,完成如下功能

傳遞一個參數給腳本,此參數為gzip、bzip2或者xz三者之一;

(1) 如果參數1的值為gzip,則使用tar和gzip歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.gz;

(2) 如果參數1的值為bzip2,則使用tar和bzip2歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.bz2;

(3) 如果參數1的值為xz,則使用tar和xz歸檔壓縮/etc目錄至/backups目錄中,并命名為/backups/etc-20160613.tar.xz;

(4) 其它任意值,則顯示錯誤壓縮工具,并執行非正常退出;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
mkdir -pv /backups
if [[ "$1" == "gzip" || "$1" == "GZIP" ]];then
    tar -zcf /backups/etc-$(date +%Y%m%d).tar.gz /etc
elif [[ "$1" == "bzip2" || "$1" == "BZIP2" ]];then
    tar -jcf /backups/etc-$(date +%Y%m%d).tar.bz2 /etc
elif [[ "$1" == "xz" || "$1" == "XZ" ]];then
    tar -Jcf /backups/etc-$(date +%Y%m%d).tar.xz /etc
else
    echo "Error"
    exit 0
fi

6、寫一個腳本,接受一個路徑參數:

(1) 如果為普通文件,則說明其可被正常訪問;

(2) 如果是目錄文件,則說明可對其使用cd命令;

(3) 如果為符號鏈接文件,則說明是個訪問路徑;

(4) 其它為無法判斷;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    if [ -f $i ];then
        echo "the file is normal"
    elif [ -d $i ];then
        echo "you can use cd enter this directory"
    elif [ -L $i ];then
        echo "the link is normal"
    else
        echo "unkown error"
    fi
done

7、寫一個腳本,取得當前主機的主機名,判斷

(1) 如果主機名為空或為localhost,或為"(none)",則將其命名為mail.magedu.com;

(2) 否則,顯示現有的主機名即可;

#!/bin/bash
#
hostname=$(hostname)
if [[ -z "$hostname" || "$hostname" == "localhost" || "$hostname" == "(none)" ]];then
    hostname mail.magedu.com
else
    echo $hostname
fi

8、寫一腳本,接受一個用戶名為參數;

(1) 如果用戶的id號為0,則顯示其為管理員;

(2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;

(3) 否則,則顯示其為普通用戶;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    uid=$(grep -E "^$i" /etc/passwd | cut -d: -f3)
    if [ $uid -eq 0 ];then
        echo "$i is root"
    elif [ $uid -ne 0 && $uid -lt 500 ];then
        echo "$i is a system user"
    else
        echo "$i is a common user"
    fi
done

10、寫一個腳本,傳遞一個用戶名參數給腳本;

(1) 如果用戶的id號大于等于500,且其默認shell為以sh結尾的字符串,則顯示“a user can log system.”類的字符串;

(2) 否則,則顯示無法登錄系統;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    uid=$(grep -E "^$i" /etc/passwd | cut -d: -f3)
    shell=$(grep -E "^$i" /etc/passwd | cut -d: -f7)
    if [[ $uid -ge 500 && "$shell" =~ .*sh ]];then
        echo "$i can login"
    else
        echo "$i can't login"
    fi
done

11、寫一個腳本,完成如下任務 :

(1) 按順序分別復制/var/log目錄下的每個直接文件或子目錄至/tmp/test1-testn目錄中;

(2) 復制目錄時,才使用cp -r命令;

(3) 復制文件時使用cp命令;

(4) 復制鏈接文件時使用cp -d命令;

(5) 余下的所有類型,使用cp -a命令;

#!/bin/bash
#
mkdir -p /tmp/test1-testn
for i in $(ls /var/log);do
    if [ -f $i ];then
        cp /var/log/$i /tmp/test1-testn
    elif [ -d $i ];then
        cp -r /var/log/$i /tmp/test1-testn
    elif [ -L $i ];then
        cp -d /var/log/$i /tmp/test1-testn
    else
        cp -a /var/log/$i /tmp/test1-testn
    fi
done

原創文章,作者:N24_澀味,如若轉載,請注明出處:http://www.www58058.com/64431

(0)
N24_澀味N24_澀味
上一篇 2016-12-21 17:15
下一篇 2016-12-21 21:33

相關推薦

  • 邏輯卷實戰演練

    1、創建一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄 2、新建用戶archlinux,要求其家目錄為/users/archlinux,而后su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄 3、擴展testlv…

    Linux干貨 2016-09-01
  • 程序包管理

    什么是程序包管理器?     顧名思義,就是將編譯好的應用程序的各組成文件打包成一個或多個程序包文件,從而更方便地實現程序包的安裝、升級、卸載還有查詢等管理操作。 那么一個程序包又由哪些部分組成呢? 程序包的組成清單:   文件清單(每個程序包都單獨實現):       安裝或卸載時運行的腳本,有如下四類:     preinstall : 安裝過程開始之前…

    Linux干貨 2016-12-16
  • Linux路由實驗

    一    實驗背景:路由器的功能是將不同網段的主機建立通信,本次試驗是在使用linux主機當作路由器,完成主機間通信。如下圖所示 二、實驗環境:主機A和B為CentOS7.2,主機C和D為CentOS6.8,且C和D上分別都有兩塊網卡 三、實驗步驟     注意:為避免干擾項,需將每臺主機…

    Linux干貨 2016-09-07
  • 簡單的啟動排錯

    一、出現 grub> 字樣,等待交互式輸入指令,說明MBR中Bootloader的stage1、stage1_5、stage2都正常,但丟失了/boot/grub.conf 文件,所以無法加載啟動項菜單,就無法讀取默認啟動的kernel、initrd等文件路徑。 解決辦法:無需救援模式,直接在此交互式界面指定相關文件的加載路徑。 (1) grub&gt…

    Linux干貨 2016-11-26
  • 馬哥教育網絡第21期-第八周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。   網橋從一個局域網接收MAC幀,拆封、校對、校驗之后,按另一個局域網的格式重新組裝,發往它的物理層。由于網橋是鏈路層設備,因此不處理數據鏈路層以上層次協議所加的報頭。   集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點…

    Linux干貨 2016-10-24
  • CentOS系統啟動流程、selinux、Systemd剖析

    交互式登錄配置文件讀取順序: /etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc 非交互式登錄配置文件讀取順序: ~/.bashrc –> /etc/bas…

    Linux干貨 2018-03-04
欧美性久久久久