馬哥教育網絡班20期-第九周課程作業

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

#!/bin/bash
nologinsum=$(awk -F: '$NF~/\/sbin\/nologin$/{print $1}' /etc/passwd |wc -l)
loginsum=$(awk -F: '$NF!~/\/sbin\/nologin$/{print $1}' /etc/passwd |wc -l)
echo "login user:$loginsum"
echo "nologin user:$nologinsum"

2、寫一個腳本

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

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

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

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

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
        echo "you input a unknow device!"
        exit 2
fi
fdisk -s $1 &> /dev/null
if [ $? -eq 0 ];then
        fdisk -l $1
else
        echo "The device is no exist!"
fi

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

腳本能夠接受一個參數;

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

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

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

#!/bin/bash
read -p "please input quit,yes,or others:" string
until [ "$string" ==  "quit" ];do
        if [ "$string" ==  "yes" ];then
                echo "try again"
                read -p "please input quit,yes,or others:" string
        else
                echo "error"
                exit 2
        fi
done
        echo "ok"

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 [ ! -e /backups ];then
mkdir /backups
fi
read -p "please input gzip,bzip,xz:" option
case "$option" in
gzip)
         tar -zcf /backups/etc-20160613.tar.gz /etc
        ;;
bzip)
        tar -jcf /backups/etc-20160613.tar.bz2 /etc
        ;;
xz)
        tar -Jcf /backups/etc-20160613.tar.xz /etc
        ;;
*)
        echo "please input gzip,bzip,xz!"
        exit 0
        ;;
esac

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

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

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

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

   (4) 其它為無法判斷;

#!/bin/bash
read -p "please input a filepath:" path
if      [ -d $path ];then
        echo "It's a folder!"
elif    [ -f $path ];then
        echo "It.s a  regular file!"
elif    [ -h $path ];then
        echo "It's a  accessory path;"
else
        echo "unknow options!"
fi

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

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

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

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

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

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

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

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

#!/bin/bash
read -p "please input a username:" username
id -u $username &> /dev/null
if [ $? -eq 0 ];then
        if      [ $(id -u $username) -eq 0 ];then
                echo "It's a Admin user!"
        elif    [ $(id -u $username) -lt 500 ];then
                echo "It's a system user!"
        else
                echo "It's a registered users!"
        fi
else
        echo "The user is no exist!"
fi

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

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

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

#!/bin/bash
  read -p "please input a username:" username
  id -u $username &> /dev/null
  if [ $? -eq 0 ];then
  #       if [ $(id -u $username) -ge 500 ] && [ $(awk -f: '/^"$username"/{print $NF}') == "/bin/bash" ];then
          if [ $(id -u $username) -ge 500 ] && [ "$(cat /etc/passwd |grep "^root" |cut -d: -f7)" == "/bin/bash" ];then
                  echo "a user can log system!"
           else    
                   echo "a user can't log system"
          fi
  else    
          echo "the user is not exist!"
  fi

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

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

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

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

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

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

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

原創文章,作者:Net20_有馬,如若轉載,請注明出處:http://www.www58058.com/44393

(1)
Net20_有馬Net20_有馬
上一篇 2016-09-08
下一篇 2016-09-08

相關推薦

  • vim文本處理工具

    vim編輯器     1、文本的編輯器的種類:         行編輯器:所謂的行編輯器是指一行一行來編輯處理的工具,如sed         全屏編輯器:編輯空間占據整個屏幕,如…

    學員作品 2016-08-10
  • 關于網絡幾個比較有意義的實驗

    這里我就偷懶,不寫過多的6上面的bind的過多步驟了,具體實現的功能就是一個bind1,當然我這里少配了一個網卡。另外一個網卡的配置格式參照eth0即可。 在這里我要重點說一下這個NETWORKMANNAGER這個程序,同學們最好在做的時候將其設置為關閉,具體方法chekconfig NtworkManager stopped 即可。 下面還有一個叫做網絡兩…

    學員作品 2016-09-07
  • sed基本用法詳解

    一、sed介紹:        sed是非交互式的編輯器,同時又是面向字符流的,一次處理一行文本。當前輸入的行被緩存至一個被稱為模式空間(pattern space)的內存空間中,與給定的模式進行比對,若不匹配,則將內容輸出至屏幕,之后讀取第二行;若匹配,則執行編輯命令,命令執行完成后,將模式空間中…

    Linux干貨 2016-08-10
  • Selinux的基本命令及練習

    配置SELinux 相關命令:       getenforce: 獲取selinux當前狀態       sestatus :查看selinux狀態      &nbs…

    學員作品 2016-09-19
  • vim 作業

    4、如何設置tab縮進為4個字符?  vi/vim中,可以通過在~/.vimrc中添加set ts=4 執行source ~/.vimrc 重讀配置文件 5、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log; 拓展模式下: &…

    學員作品 2016-08-15
  • for,while,until循環

    一、用until實現下列作業 1、每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并提示該用戶退出系統。 #!/bin/bash until  who | grep "^\<hacker\>" > /var/log/l…

    學員作品 2016-08-22
欧美性久久久久