馬哥教育網絡班21期第9周課程練習

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

#!/bin/bash
#
declare -i nologin_user;other_user
all_users=`awk -F':' '{print $1}' /etc/passwd`
for uesr_test in $all_users;do
  if [ /sbin/nologin == awk -F':' '{print $6}' ];then
    nologin_user++
  else
    other_user++
  fi
done
echo "The nologin user is $nologin_user"
echo "The other user is $other_user"

2、寫一個腳本

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

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

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

#!/bin/bash
#
hostname=`hostname|cut -d'.' -f1`
[ $hostname == localhost] && hostname=www.magedu.com || echo $hostname

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

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

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

#!/bin/bash
#
if [ $# lt 1 ];then
  echo "At least one device path!"
  exit
else
  for i in $*;do
    if `fdisk -l $i &> /dev/null`;do
      fdisk -l $i | grep ^/dev
    else
      echo "The path $i does not exist!"
    fi
  done
fi

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

   腳本能夠接受一個參數;

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

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

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

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one argument."
    exit 0
fi
case $1 in
quit)
    echo "exit..."
    exit 0
    ;;
yes)
    echo "continue..."
    ;;
*)
    exit 1
    ;;
esac

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 [ $# -lt 1 ];then
echo "At lesat one argument in gzip/bzip2/xz"
exit 0
fi
case $1 in
gzip)
    tar -czvf /backups/etc-`date +%Y%m%d`.tar.gz /etc/
    ;;
bzip2)
    tar -cjvf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc/
    ;;
xz)
    tar -cJvf /backups/etc-`date +%Y%m%d`.tar.xz /etc/
    ;;
*)
    echo "Error for tools..."
    exit 1
    ;;
esac

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

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

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

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

   (4) 其它為無法判斷;

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "At lesat one PATH"
    exit 0
fi
if [ -f $1 ];then
    echo "Can be Access!"
elif [ -d $1 ];then
    echo "Can be cd!"
elif [ -L $1 ];then
    echo "A PATH to Access!"
else
    echo "unkown!"
    exit 1
fi

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 [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`

if [ $uid01 -eq 0 ];then
    echo "Administrater"
elif [ $uid01 -gt 0 -a $uid01 -lt 500 ];then
    echo "System user"
else
    echo "Common user"
fi

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

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

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

#!/bin/bash
if [ $# -ne 1 ];then
    echo "Input one user"
    exit 0
elif ! id $1 &> /dev/null;then
    echo "Not Exsit user"
    exit 0  
fi

uid01=`grep ^$1 /etc/passwd | awk -F':' '{print $3}'`
sh01=`grep ^$1 /etc/passwd | awk -F':' '{print $7}'`
sh02=${sh01: -2}
if [ $uid01 -eq 0 -a $sh02 == "sh" ];then
    echo "a user can log system."
else
    echo "can not log system."
fi

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

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

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

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

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

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

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

原創文章,作者:N21-孟然,如若轉載,請注明出處:http://www.www58058.com/47477

(0)
N21-孟然N21-孟然
上一篇 2016-09-19
下一篇 2016-09-19

相關推薦

  • Linux基本文本管理命令

    一.Linux上的文件管理命令都有哪些,其使用的方法及其相關演示1.cp命令:copy (文件復制功能)源文件,目標文件單源復制:cp [OPTION]…[-T] SOURCE DEST多源復制:cp [OPTION]…SOURCE…DIRECTORYcp [OPTION]… -T DIRECTORY SOURCE… 單源復制:cp [OPTION]…[-T…

    2017-09-20
  • 淺談DNS基本原理以及實現方法(二)

             DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神…

    Linux干貨 2015-12-19
  • LNMP WordPress 配置文件修改參考 安裝LNMP + 搭建WordPress個人博客的補充

    對小黑的  http://www.www58058.com/17222 的一些補充,因為他嘿嘿嘿我嘿嘿嘿嘿….. 實際使用中必須對一下文件作出修改 建議值為以下建議值 要不然實際使用過程中問題很大 nginx.conf    優化和上傳的限制 worker_processes  8; &…

    Linux干貨 2016-06-01
  • 淺談Nginx(二)—http下server配置

    淺談Nginx(二)—http下server配置 此文介紹Nginx下的http模塊,著重介紹http模塊下的server服務 ——–依據”馬哥教育”主講人馬永亮導師的上課筆記整理——- 目錄  一. http相關的基本配置:     1)…

    系統運維 2017-02-07
  • zabbix表分區(適用于zabbix2.0.x,zabbix2.2.x和zabbix2.4.x)

    本文主要介紹了zabbix進行數據庫表分區的方法:         在系統監控中,zabbix已經代替了nagios+cacti,zabbix以其良好的圖形展示和高度自定義贏得了很多運維人員的喜愛。但是由于在工作中,zabbix跑的時間過長(我們公司跑了將近3年),web頁面經??D,監控…

    Linux干貨 2015-10-27
  • 進程管理工具:ps,top,htop,dstat

    進程列表查看,系統資源使用情況查看,比如CPU占用情況,內存使用情況,網絡IO,硬盤IO等等。本文介紹的幾款工具幫您實現。 進程是指運行中的程序的一個副本,進程的有關信息映射在/proc/#下,ps等工具通過加工/proc/下文件而顯示出進程列表。 linux內核屬于搶占式多任務式,內核將CPU處理時間按時間片分配給各個進程,這里有一個優先級的問題,優先級越…

    Linux干貨 2016-09-22

評論列表(3條)

  • 馬哥教育
    馬哥教育 2016-09-19 18:08

    1題不對,在仔細看看你的判斷條件

    • N21-孟然
      N21-孟然 2016-09-20 09:20

      @馬哥教育確實有誤,未驗證 if [ /sbin/nologin == awk -F’:’ ‘{print $6}’ ];then

  • N21-孟然
    N21-孟然 2016-09-20 09:29

    修改:
    if [ /sbin/nologin == `grep ^$usertest /etc/passwd | awk -F’:’ ‘{print $7}’ ` ];then

欧美性久久久久