選擇判斷專題腳本編程_第九周練習

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

#!/bin/bash
#
declare -i y=0
declare -i n=0
for i in $(cut -d: -f7 /etc/passwd);do
    if [[ "$i" == "/sbin/nologin" ]];then
        let n++
    else 
               let y++
        fi
done
echo -e "$y users can log in.\n$n users can't log in."

Q2:寫一個腳本:

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

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

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

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

Q3:寫一個腳本,完成如下功能:

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

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

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "At least one  path of block device is needed!\nPlease try again!" && exit 1
for i in $@;do
        if [ -b $i ];then
                fdisk -l $i
        fi
done

Q4:寫一個腳本,完成如下功能:

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

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

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

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

#!/bin/bash
#
read -p "What is your choice?[yes or quit] " var
case $var in
quit)
    echo "Bye~"
    exit 0
    ;;
yes)
    echo "Go on scripts."
    ;;
*)
    echo "Error!"
    exit 1
    ;;
esac

Q5:寫一個腳本,完成如下功能:

  • 傳遞一個參數給腳本,此參數為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
#
time=$(date +%Y%m%d)
read -p "Choose the one to use.[gzip or bzip2 or xz]" var
case $var in
gzip)
        tar -zcf /backups/etc-$time.tar.gz /etc &> /dev/null
        ;;
bzip2)
        tar -jcf /backups/etc-$time.tar.bz2 /etc &> /dev/null
        ;;
xz)
        tar -Jcf /backups/etc-$time.tar.xz /etc &> /dev/null
        ;;
*)
        echo "compress tools error!"
        exit 1
        ;;
esac

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

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

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

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

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

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "A path needed!\nPlease try again!" && exit 1
if [ -L "$1" ];then
        echo "This is a path to somewhere else~"
elif [ -d "$1" ];then
        echo "This is a directory.Please use command 'cd'."

elif [ -f "$1" ];then
        echo "This file can be read!"
else
        echo "Sorry,unkown!"
fi

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

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

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

#!/bin/bash
#
hostname_=$(hostname)
if [ -z "$hostname_" -o "$hostname_" == "localhost" -o "$hostname_" == "localhost.localdomain" ];then
        hostname mail.magedu.com
else
        hostname
fi

Q8:寫一腳本,接受一個用戶名為參數;

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

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

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

#!/bin/bash
#
[ $# -eq 0 ] && echo -e "A user name needed!\nPlease try again!" && exit 1
if id $1 &> /dev/null;then
        if [ `id -u $1` -ge 500 ];then
                echo "$1 is a common user."
        elif [ `id -u $1` -ge 1 ];then
                echo "$1 is a system user."
        else
                echo "$1 is a root user."
        fi
else
        echo -e "$1 not exits!\nTry again!"
fi

Q10:寫一個腳本,傳遞一個用戶名參數給腳本;

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

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

#!/bin/bash
#
if [ $# -eq 0 ];then
        echo -e "A user needed!\nTry again please!"
        exit 1
fi
if id $1 &> /dev/null;then
        if [ `id -u $1` -ge 500 ] && grep "^$1.*sh$" /etc/passwd &> /dev/null;then
                echo "A user can log system."
        else
                echo "Cannot log system."
        fi
else
        echo "$1 not exits!"
fi

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

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

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

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

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

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

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

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

(0)
N24_VCN24_VC
上一篇 2016-12-25
下一篇 2016-12-25

相關推薦

  • bash功能特性一 變量

    一、什么是shell     shell是為了使用戶能夠操作應用程序的接口程序。如經常使用的圖形界面及命令行界面都是shell。下面來介紹一下bash這個shell的功能。 二、變量的概念     被命名的內存空間即為變量,Linux中內置了許多變量,我們可以通過修改這些變量的值…

    Linux干貨 2015-04-19
  • Mozart的劍(文本處理工具)——壹劍(文本查看cat、more、less)

    壹劍(文本查看cat、more、less) 博客之前突然想起兩句話,很有意思的話,在此貼出上句,希望可以與大家分享,不可問度娘,有興趣的可以試試。 上句:煙鎖池塘柳    下句: 上句:因荷而得藕    下句: 1>cat命令是Linux系統下的一個文本輸出命令,一般是用于觀看某個文件的內容,特點:一次性顯示整個…

    2017-07-29
  • 第三次 練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d "" -f1 |uniq root     pts/0        2016-11-13 12:17 (172.16.220.14) 2、取出最后登錄到…

    Linux干貨 2016-11-16
  • 基于LNMP架構添加Memcached支持,并驗證其緩存結果

    一 Memcached簡介 Memcached是一個自由開源的,高性能,分布式內存對象緩存系統。它是一種基于內存的key-value存儲,用來存儲小塊的任意數據(字符串、對象)。這些數據可以是數據庫調用、API調用或者是頁面渲染的結果。 Memcached簡潔而強大。它的簡潔設計便于快速開發,減輕開發難度,解決了大數據量緩存的很多問題。它的API兼容大部分流…

    Linux干貨 2016-12-12
  • 創建用戶、用戶組

    創建用戶、用戶組                  1解釋Linux的安全模型   2解釋用戶帳號和組群帳號的目的   3用戶和組管理命令   4理解并設置文件權限 5默認權限 6特殊權限 …

    Linux干貨 2016-08-08
  • 推薦CentOS Linux下的分區及格式化工具

    簡介 伴隨著科技的飛速發展,越來越多的企業對于服務器的穩定要求越來越高,越來越多的企業開始采用linux系統來部署自己的服務,以求高效的穩定性,當然任何操作系統都需要一個最基本的基礎,那就是硬盤,及硬盤分區,今天來給大家推薦幾款CentOS Linux下的分區工具及如何查看分區環境,也會給大家來帶一些硬盤的基本知識 一、硬盤的接口類型 分區肯定是對硬盤進行分…

    2017-03-19
欧美性久久久久