馬哥教育網絡班19期第九周課程練習

馬哥教育網絡班19期第九周課程練習

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

#!/bin/bash

#

#count nologin

declare -i nologins=0

declare -i logins=0

file="/etc/passwd"

bashs=`cat $file  | cut -f7 -d:`

for i in $bashs ; do

 #echo $i

  if [ $i == "/sbin/nologin" ]; then

    let nologins++

  else

    let logins++

  fi

done

echo "Total nologin bash shell : $nologins."

echo "Total login bash shell : $logins."

用awk實現,統計每個shell數量:

 awk -F: '{bashs[$NF]++}END{for (i in bashs) {print "bash shell:"i,"\t bash shell count:"bashs[i]}}'  /etc/passwd

 

 cat /etc/passwd | awk -F: '{bashs[$NF]++}END{for (i in bashs) {print i,bashs[i]}}' 

2、寫一個腳本

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

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

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

#!/bin/bash

#

#change hostname

hostname=`hostname`

  if [ $hostname == 'localhost' ]; then

    hostname www.magedu.com

    echo "hostname has change to 'www.magedu.com'. "

  else

    echo $hostname

  fi

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

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

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

#!/bin/bash

#

#show the dev info

readdevpath() {

  read -p "Please input the driver path: " drivers

   if [ $drivers = "quit" ]; then

      exit 2

   fi

   if  fdisk -l $drivers &> /dev/null  ; then

     fdisk -l $drivers

   else

     echo "invail driver"

     readdevpath

   fi

}

readdevpath

fdisk -l $drivers

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

   腳本能夠接受一個參數;

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

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

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

#!/bin/bash

#

#arg select

if [ $# -lt 1 ]; then

  echo "<1"

  exit 2

fi

case $1 in

quit)

  echo "Exit…"

  exit 0;;

yes)

  echo "continue…";;

*)

  echo "oh no!"

  exit 4;;

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

#

#case tar bzip xz

if [ $# -lt 1 ]; then

  echo "Userage: `basename $0` gzip|bzip2|xz "

  exit 2

fi

case $1 in

gzip)

   mkdir /backups &> /dev/null

   tar czvf /backups/etc-20160613.tar.gz /etc &> /dev/null

   echo "tar gzip Backup /etc succesful!"

;;

bzip2)

   mkdir /backups &> /dev/null

   tar cjvf /backups/etc-20160613.tar.bz2 /etc &> /dev/null

   echo "tar bz2 Backup /etc succesful!"

;;

xz)

   mkdir /backups &> /dev/null

   tar cJvf /backups/etc-20160613.tar.xz /etc &> /dev/null

   echo "tar xz Backup /etc succesful!"

;;

*)

  echo "Tar Err!"

  echo "Userage: `basename $0` gzip|bzip2|xz "

  exit 2

esac

   

   

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

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

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

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

   (4) 其它為無法判斷;

#!/bin/bash

#

#file type

if [ $# -lt 1 ]; then

  echo "Usare: `basename $0` arg (as a filename with path)."

  exit 2

fi

if [ -f $1 ]; then

  echo "$1 is a file"

elif

  [ -s $1 ]; then

  echo "$1 is a symbolic link file."

elif

 [ -d $1 ]; then

  echo "$1 is a directory.you can use 'cd $1'  change to it. "

else

  echo "Unknow file type."

fi

   

   

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

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

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

#!/bin/bash

#

#change hostname

ChangeHostName() {

    hostname mail.magedu.com

    echo "hostname has change to 'mail.magedu.com'. "

}

hostname=`hostname`

  if [ $hostname == "localhost" ]; then

    ChangeHostName

  elif

     [ $hostname == "none" ]; then

    ChangeHostName

  else

    echo "HOST Name: "$hostname

  fi

   

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

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

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

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

#!/bin/bash

#

#echo then user id info

declare -i i_uid

declare -i uid_type 

if [ $# -lt 1 ]; then

  echo "\"Userage: `basename $0`  args.\"  args for username."

fi

if id $1 &> /dev/null ; then 

 i_uid=`id -u $1`

 if [ $i_uid -eq 0 ]; then

   uid_type=0

 elif

   [ $i_uid -lt 501 ]; then

   uid_type=1

 else

   uid_type=2 

 fi

 case $uid_type in 

 0)

   echo "User:$1 is root user."

 ;;

 1)

   echo "User:$1 is a system user."

 ;;

 *)

   echo "User:$1 is a comma user."

 esac

else

  echo "$1: No such user!"  

fi

   

   

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

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

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

#!/bin/bash

#

#echo shell can be login into system

declare -i idno

if [ $# -lt 1 ]; then

  echo "Useage: `basename $0` args .(args for username)"

  exit 2

fi

if id $1 &> /dev/null ; then

  idno=`id -u $1`

  if [ $idno -ge 500 ] ; then

    if `grep $1 /etc/passwd | grep sh$ &> /dev/null` ; then

      echo "User:$1 can log system."

    else

      echo "User:$1 can not login to system."

    fi

  else

    echo "User:$1 can not login to system."

  fi

else

  echo "$1: no such user!"

fi

  

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

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

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

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

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

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

#!/bin/bash

#

#copy file to /tmp/test1-testn

sdir=/var/log

ddir=/tmp/test1-testn

files=`ls $sdir`

if [ ! -d $ddir ]; then

  mkdir -pv $ddir

fi

cd $sdir

for i in $files ; do

  if [ -L $i ] ; then

    filetype="s"

  elif

    [ -d $i ] ; then

    filetype="d"

  elif

    [ -f $i ] ; then

    filetype="f"

  else

    filetype="o"

  fi

case $filetype in

  s)

   cp -d $i $ddir

  # echo "cp -d $i"

   ;;

  d)

   cp -r $i $ddir

  # echo "cp -r $i"

   ;;

  f)

   cp $i $ddir

  # echo "cp $i"

   ;;

   

  *)

   cp -a $i $ddir

  # echo "cp -a $i"

   ;;

esac

done

   

   

   

原創文章,作者:馬哥Net19_小斌斌,如若轉載,請注明出處:http://www.www58058.com/22027

(0)
馬哥Net19_小斌斌馬哥Net19_小斌斌
上一篇 2016-07-07 10:45
下一篇 2016-07-07 10:45

相關推薦

  • Linux系統命令總結——文件管理篇

    整理了一些和文件管理有關的小命令、索引節點、鏈接文件、通配符,以及標準I/O的知識點,希望對各位有些許的幫助順便也加深一下自己的記憶和理解。學如逆水行舟,不進則退。

    2018-03-30
  • sed使用小命令及課后作業

    Stream EDitor,  行編輯器 sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed …

    Linux干貨 2017-03-18
  • Vsftpd+MySQL實現虛擬用戶驗證登錄

    一、安裝所需要包和包組: 在數據庫服務器上安裝包: yum –y install mariadb-server mariadb-devel systemctl start mariadb.service systemctl enable mariadb 在FTP服務器上安裝包pam_mysql centos7:無對應rpm包,需…

    Linux干貨 2017-08-14
  • bash中的變量

        對任何一門編程語言來說,最基礎的部分就是變量。那什么事變量呢?變量就是把一個已知的可以變動的值,賦給一個固定名字的,用固定的名字代表這個可變動的值。在bash中也不例外,跟大多數編程語言一樣,它也有一些自己的語法和規則 bash變量:     1.規則設置:變量和變量的值中間用=連接,=的兩…

    Linux干貨 2016-08-15
  • 4

    1;復制/etc/skel目錄為/home/tuinser1, 要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 #   install -d -m 700 /etc/skel /home/tuser1  #  &nbsp…

    Linux干貨 2017-01-16

評論列表(2條)

  • 馬哥教育
    馬哥教育 2016-07-07 11:34

    寫的很好,排版還可以在漂亮一點,加油

    • 馬哥Net19_小斌斌
      馬哥Net19_小斌斌 2016-07-25 22:58

      @馬哥教育排版一提交就變了,有什么方法可以排得好點呢?

欧美性久久久久