N21_第09周_shell腳本

作業題目:

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

預置條件:
[root@zhouyong148 N21_09]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mongodb:x:500:500::/home/mongodb:/bin/bash
shell腳本:
[root@zhouyong148 N21_09]# cat N21_09_01.sh 
#!/bin/bash
declare -i loginable=0
declare -i unloginable=0
  for i in $(cut -d':' -f7 /etc/passwd); do
        if [ $i == /sbin/nologin  ]; then
                let unloginable++
        else
                let loginable++
        fi
  done
echo "用戶的shell可以登錄的有:$loginable個"
echo "不可以登錄的用戶shell有:$unloginable個"
執行并查看結果:
[root@zhouyong148 N21_09]# sh N21_09_01.sh 
用戶的shell可以登錄的有:5個
不可以登錄的用戶shell有:16個

2、寫一個腳本
    (1) 獲取當前主機的主機名,保存于hostname變量中;
    (2) 判斷此變量的值是否為localhost,如果是,則將當前主機名修改為www.magedu.com;
    (3) 否則,則顯示當前主機名;

預置條件:
[root@zhouyong148 N21_09]# hostname
zhouyong148
shell腳本:
[root@zhouyong148 N21_09]# vi N21_09_02.sh 
#!/bin/bash
hostname=$(hostname)
if [[ "$hostname" == localhost ]];then
        hostname www.magedu.com
        echo "hostname is: 'www.magedu.com'"
else
        echo "hostname is: $hostname"
fi
運行及查看結果:
[root@zhouyong148 N21_09]# sh N21_09_02.sh 
hostname is: zhouyong148

3、寫一個腳本,完成如下功能
    (1) 傳遞一個磁盤設備文件路徑給腳本,判斷此設備是否存在;
    (2) 如果存在,則顯示此設備上的所有分區信息;

[root@zhouyong148 N21_09]# vi N21_09_03.sh 
#!/bin/bash
if [ $# -le 0 ];then
        echo "參數的個數不能為0,請帶入參數,例 N21_09_03.sh /dev/DEVICE_NAME"
        exit 1
else
        dev=$1
        if [ -e $dev ];then
                echo "設備信息存在"
                fdisk -l $dev
        else
                echo "This device don't exist"
        fi
fi

4、寫一個腳本,完成如下功能
   腳本能夠接受一個參數;
   (1) 如果參數1為quit,則顯示退出腳本,并執行正常退出;
   (2) 如果參數1為yes,則顯示繼續執行腳本;
   (3) 否則,參數1為其它任意值,均執行非正常退出;

[root@zhouyong148 N21_09]# vi N21_09_04.sh 
#!/bin/bash
if [ $# -le 0 ];then
        echo "參數個數為空,請輸入參數quit|yes"
        exit 1
else
        case $1 in
        quit)
          echo "quiting..."
          exit 0;;
        yes)
          echo "countine...";;
        *)
          echo "error..."
          exit 1;;
        esac
fi
[root@zhouyong148 N21_09]# sh N21_09_04.sh 
參數個數為空,請輸入參數quit|yes
[root@zhouyong148 N21_09]# sh N21_09_04.sh yes
countine...
[root@zhouyong148 N21_09]# sh N21_09_04.sh error
error...

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@zhouyong148 N21_09]# vi N21_09_05.sh
#!/bin/bash
if [ $# -le 0 ]; then
        echo "參數個數不能為空,請輸入參數gzip|bzip2|xz|..."
        exit 1
else
        case $1 in
        gzip)
                tar czvf /backups/etc-20160613.tar.gz /etc;;
        bzip2)
                tar cjvf /backups/etc-20160613.tar.bz2 /etc;;
        xz)
                tar cJvf /backups/etc-20160613.tar.xz /etc;;
        *)
        echo "error..."
        exit 1;;
        easc
fi

6、寫一個腳本,接受一個路徑參數:
   (1) 如果為普通文件,則說明其可被正常訪問;
   (2) 如果是目錄文件,則說明可對其使用cd命令;
   (3) 如果為符號鏈接文件,則說明是個訪問路徑;
   (4) 其它為無法判斷;

[root@zhouyong148 N21_09]# vi N21_09_06.sh
#!/bin/bash
if [ $# -le 0 ];then
        echo "參數個數不能為空,例N21_09_06.sh /filePath/fileName"
        exit 1
fi
if [ -f $1 ];then
        echo "This file can be access."
elif [ -d $1 ];then
        echo "command 'cd' can be use."
elif [ -L $1 ];then
        echo "this is accessable file."
else
        echo "filetype unkonw."
fi
[root@zhouyong148 N21_09]# sh N21_09_06.sh /home/logCreate.sh 
This file can be access.

7、寫一個腳本,取得當前主機的主機名,判斷
   (1) 如果主機名為空或為localhost,或為"(none)",則將其命名為mail.magedu.com;
   (2) 否則,顯示現有的主機名即可;

[root@zhouyong148 N21_09]# vi N21_09_07.sh
#!/bin/bash
hostname=$(hostname)
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" -o "$HOSTNAME" == localhost ];then
        hostname mail.magedu.com
        echo "hostname is: 'mail.magedu.com'"
else
        echo "hostname is: $hostname"
fi
[root@zhouyong148 N21_09]# sh N21_09_07.sh 
hostname is: zhouyong148

8、寫一腳本,接受一個用戶名為參數;
   (1) 如果用戶的id號為0,則顯示其為管理員;
   (2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;
   (3) 否則,則顯示其為普通用戶;

[root@zhouyong148 N21_09]# vi N21_09_09.sh 
#!/bin/bash
#
if [ $# -le 0 ];then
    echo "Usage:bash N21_09_09.sh username"
    exit 1
fi
if id $1 &> /dev/null;then
    userid=`grep ^$1 /etc/passwd | cut -d: -f3`
    if [ $userid -eq 0 ];then
        echo "$1 is Administrator."
    elif
       [ $userid -gt 0 -a $userid -lt 500 ];then
        echo "$1 is System User."
    else
        echo "$1 is Common User."
    fi
fi
[root@zhouyong148 N21_09]# sh N21_09_09.sh root
root is Administrator.
[root@zhouyong148 N21_09]# sh N21_09_09.sh mongodb
mongodb is Common User.

10、寫一個腳本,傳遞一個用戶名參數給腳本;
   (1) 如果用戶的id號大于等于500,且其默認shell為以sh結尾的字符串,則顯示“a user can log system.”類的字符串;
   (2) 否則,則顯示無法登錄系統;

#!/bin/bash
#
if [ $# -lt 1 ];then
    echo "Usage:bash 9.10.sh username"
    exit 1
fi
if id $1 &> /dev/null;then
    userid=`grep ^$1 /etc/passwd | grep sh$ | cut -d: -f3`
    if [ $userid -gt 0 -a $userid -eq 500 ];then
        echo "a user can log system."
    else
        echo "a user can not log system."
    fi
fi
[root@zhouyong148 N21_09]# sh N21_09_10.sh 
Usage:bash 9.10.sh username
[root@zhouyong148 N21_09]# sh N21_09_10.sh root
a user can not log system.
[root@zhouyong148 N21_09]# sh N21_09_10.sh mongodb
a user can log system.

11、寫一個腳本,完成如下任務 :
   (1) 按順序分別復制/var/log目錄下的每個直接文件或子目錄至/tmp/test1-testn目錄中;
   (2) 復制目錄時,才使用cp -r命令;
   (3) 復制文件時使用cp命令;
   (4) 復制鏈接文件時使用cp -d命令;
   (5) 余下的所有類型,使用cp -a命令;

[root@zhouyong148 N21_09]# vi N21_09_11.sh 
#!/bin/bash
if ! [ -d /tmp/test1-testn ];then
    mkdir -p /tmp/test1-testn
fi
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 [ -L $file ];then
        cp -d /var/log/$file /tmp/test1-testn
    else
        cp -a /var/log/$file /tmp/test1-testn
    fi
done
[root@zhouyong148 N21_09]# sh N21_09_11.sh

原創文章,作者:365,如若轉載,請注明出處:http://www.www58058.com/58834

(0)
365365
上一篇 2016-11-14
下一篇 2016-11-14

相關推薦

  • 文本處理sed的使用

    語法:sed【option】、、、‘script’ inputfile、、、 選項:         -n:不輸出模式空間內容到屏幕,即不自動打印        -e: 多點編輯        -f:/PATH/SCRIPT_FILE: 從…

    Linux干貨 2017-05-01
  • find命令詳解

    find命令詳解 實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找; 一、工作特性: 查找速度略慢; 精確查找,只查找文件路徑的基名而非整個路徑; 實時查找; 可能只搜索用戶具備讀取和執行權限的目錄 二、 用法: find [查找起始路徑] [OPTIONS] [查找條件] [處理動作] 查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄…

    Linux干貨 2017-03-19
  • N26 第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 思路:    首先使用 who 查看當前系統上所有已經登錄的用戶,然后用 cut 或 awk 截取用戶名,最后使用 sort 或 unqi 去除重復信息。命令:    who | cut -d’ ‘ -f1 …

    Linux干貨 2017-02-25
  • 8.9作業

    刪除/etc/grub2.conf文件中所有以空白開頭的行,行首的空白字符 [root@English6 ~]# sed "s@^[[:space:]]\+@@" /etc/grub.conf  # grub.conf generated by an…

    Linux干貨 2016-08-11
  • 筆記整理:權限管理1-基礎權限管理&默認權限

    權限管理: 權限的分配根據owner和group來進行分配的   對于文件,各個權限的意義: r:可以使用工具查看內容 w:往里寫 x:運行,提請內核發起一個進程 對于目錄,各個權限的意義: r:用ls 查看目錄列表   w:可以創建或刪除目錄中的文件   x:可以使用ls -l查看文件列表,也可cd進去   管理命令…

    Linux干貨 2016-08-05
  • Linux基礎知識之根下各目錄的介紹

    /bin  :所有用戶使用的基本用戶命令文件,二進制格式的 /sbin :供系統管理使用的工具程序 /boot :引導加載器必須用到的各靜態文件:kernel initramfs(initrd),grub /dev  :存儲特殊文件或設備文件;設備的類型:字符設備,塊設備; /etc  :系統程序的靜態配置文件,只能為靜態的不能…

    Linux干貨 2016-07-10

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-11-16 15:45

    寫的很棒,提個小小的意見,命名變量的時候,盡量不要使用系統的已有函數名

欧美性久久久久