從Linux小白到大?!c狼共舞的日子9

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

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


[root@localhost ~]# cat shell.sh 
#!/bin/bash
#
declare -i loginuser=0
declare -i nologinuser=0
while read line;do
    if [ `echo $line | cut -d: -f7`  ==  '/sbin/nologin' ];then
        let nologinuser++
    else
        let loginuser++
    fi

done < /etc/passwd
echo "nologin:$nologinuser"
echo "login:$loginuser"

2、寫一個腳本

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

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

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


[root@localhost ~]# cat hostname.sh 
#!/bin/bash
#
hostname=$(hostname)
[[ $hostname = 'localhost' ]] && hostname www.magedu.com || echo "hostname:$(hostname)"

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

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

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


[root@localhost ~]# cat device.sh 
#!/bin/bash
#
[ $# -ne 1 ] && echo "Usage:$0 /PATH/TO/DEVICE" && exit 1 
[ -b $1 ] && echo "$1 is device." && lsblk $1 || echo "$1 no device."

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

  • 腳本能夠接受一個參數;

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

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

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


[root@localhost ~]# cat quit.sh 
#!/bin/bash
#
read -p "Enter a choice:(quit|yes)" ans
case $ans in
quit)
    echo "quit...."
    exit 0;;
yes)
    echo "continue....";;
*)
    echo "error!!!"
    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) 其它任意值,則顯示錯誤壓縮工具,并執行非正常退出;


[root@localhost ~]# mkdir /backups
[root@localhost ~]# cat tar.sh 
#!/bin/bash
#
[ $# -lt 0 ] && echo "Usage:$0 gzip|bzip2|xz" && exit 1
case $1 in
gzip)
    tar czf /backups/etc-20160613.tar.gz /etc &>/dev/null;; 
bzip2)
    tar cjf /backups/etc-20160613.tar.bz2 /etc &>/dev/null;;
xz)
    tar cJf /backups/etc-20160613.tar.xz /etc &>/dev/null;;
*)
    echo "Usage:$0 gzip|bzip2|xz"
    exit 2;;
esac

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

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

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

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

  • (4) 其它為無法判斷;


[root@localhost ~]# cat type.sh 
#!/bin/bash
#
[ $# -lt 1 ] && echo "Usage:$0 /PATH/TO/FILE" && exit 1
[ -L $1 ] && echo "$0 is Link" && exit 0
[ -f $1 ] && echo "$0 can access." && exit 0
[ -d $1 ] && echo "$0 can use cd." && exit 0
echo "No file | No directory | No syblink."

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

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

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


[root@localhost ~]# cat hostname1.sh 
#!/bin/bash
#
name=$(hostname)
[[ -z $name || $name = "localhost" || $name = "(none)" ]]
[ $? -eq 0 ] && hostname mail.magedu.com || echo "hostname:$name"

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

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

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

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


[root@localhost ~]# cat user.sh 
#!/bin/bash
#
[ $# -lt 1 ] && echo "Usage:$0 username" && exit 1
! id $1 &>/dev/null && echo "No such user." && exit 0 || userid=`id -u $1`
[ $userid -eq 0 ] && echo $1:adminuser. && exit 0
[[ $userid -gt 0 && $userid -lt 500 ]] && echo $1:systemsuer. && exit 0
[ $userid -ge 500 ] && echo $1:commonuser. && exit 0

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

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

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


[root@localhost ~]# cat userbash.sh 
#!/bin/bash
#
[ $# -lt 1 ] && echo "Usage:$0 username" && exit 1
! id $1 &>/dev/null && echo "No such user." && exit 1 || userid=`id -u $1`
if grep sh$ /etc/passwd | grep ^$1 &>/dev/null;then
    [ $userid -ge 500 ] && echo "a user can log system." || echo "Can not log."
else
    echo "Can not log."
fi

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

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

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

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

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

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


[root@localhost ~]# cat cptmp.sh 
#!/bin/bash
#
declare -i num=1
for i in /var/log/*;do
    [ -L $i ] && cp -d $i /tmp/test$num && let num++ && continue
    [ -d $i ] && mkdir /tmp/test$num && cp -r $i /tmp/test$num && let num++ && continue
    [ -f $i ] && cp $i /tmp/test$num && let num++  && continue
    cp -a /tmp/test$num && let num++ && continue
done

原創文章,作者:N21_孤狼,如若轉載,請注明出處:http://www.www58058.com/60444

(0)
N21_孤狼N21_孤狼
上一篇 2016-12-05 17:05
下一篇 2016-12-05 17:05

相關推薦

  • 第8天:腳本基礎,btrf,raid,

    http://note.youdao.com/yws/public/redirect/share?id=61b38adef24ced4dc646a5ef8e68df18&type=false

    Linux干貨 2016-08-16
  • 8.1作業習題

    1,創建testuser uid 1234,主組:bin,輔助組:root,ftp,shell:/bin/csh home:/testdir/testuser useradd -u 1234 -g bin -G root,ftp -s /bin/csh -d /testdir/testuser testuser 2.修改testuser uid:4321,主…

    Linux干貨 2016-08-04
  • Linux_創建文件系統及掛載文件系統流程詳解

    Linux 創建文件系統及掛載文件系統流程詳解 摘要:本文對新增硬盤,切割硬盤,創建硬盤分區,為硬盤分區創建文件系統,以及加載文件系統的流程做總結性論述;主要是為初學者弄清楚這一操作過程;本文涉及fdisk、mkfs、mount … … 等工具;對/etc/fstab 進行了解說;還有磁盤掃描工具fsck 等介紹; +++++++++…

    Linux干貨 2016-01-18
  • SSH會話劫持實現端口轉發

    在進行滲透測試時,我們有時候會碰到搭建的測試環境、產品服務器、DMZ或者其他類似的機器群的情況,這時我們完全可以把它們看作跳板。這些系統被設計成對外交互的接口,這時候我們考慮對其他域里的用戶進行SSH會話劫持是個不錯的選擇。 那么如果你擁有了某一個跳板的控制權限,想要通過另一個域的用戶對遠程域進行訪問會怎么辦呢?當然,這時候你是沒有密碼、密鑰的,你不能拋棄二…

    系統運維 2015-03-23
  • 20160804作業

    查出分區空間使用率的最大百分比值 查出用戶UID最大值的用戶名、UID及shell類型 查出/tmp的權限,以數字方式顯示 統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序 利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255        &nb…

    Linux干貨 2016-08-08
  • RPM程序包管理

           RPM的全名“RedHat Package Manager”,當初這個是RedHad公司開發的一款程序包管理套件,隨著RPM的不斷完善,RPM逐漸成為眾多linux發行版程序包管理器的代名詞,那什么是RPM,為什么會用到RPM這個程序包管理工具那,接下來我一一揭曉。  &nb…

    Linux干貨 2015-11-04

評論列表(1條)

  • Jeanne
    Jeanne 2017-04-24 03:59

    good point simon. i’ve recently been to the future and couldn’t find a planner anywhere.these days you have to go with flow (of change). planners should be more soc/ttaliculeural synthesizers. that would be useful vs. restating the bleeding obvious and pretending it’s an “insight”.the drumming gorilla simply rocks. that’s all you can ask of a chocolate bar commercial.

欧美性久久久久