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

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 22:16
下一篇 2016-12-25 23:41

相關推薦

  • AWK——文本處理三劍客

    GNU awk ·文本處理三工具:grep,sed,awk          grep,egrep,fgrep:文本過濾工具:pattern          sed:行編輯器  &nbsp…

    Linux干貨 2016-09-20
  • sed和vim

    1、如何設置tab縮進為4個字符? vi .vimrc //編輯用戶家目錄下的vim配置文件 set tabstop=4 2、復制/etc/rc.d/init.d/functions文件至/tmp 目錄;替換/tmp/functions 文件中的/etc/sysconfig/init 為/var/log; ~]# cp /etc/rc.d/init.d/fu…

    Linux干貨 2016-08-10
  • shell編程

       編程基礎   編程基礎:       編程:也就是程序+數據           程序編程風格:                  過程式:以指…

    Linux干貨 2016-08-15
  • Linux中的包管理

    1. RPM介紹 rpm是linux中的包管理軟件,通過rpm用戶可以對rpm包進行查詢、安裝、卸載、升級和校驗等操作。 1.1 查詢 查詢 -q:可以查看某個包是否已經安裝 -qa:查看系統已經安裝的所有包 -qi:查詢某個安裝包的詳細情況 -ql:查詢安裝某個包之后會生成哪些文件 -qc:查詢某個軟件的配置文件 -qd:查詢某個軟件的所有文檔 &#821…

    Linux干貨 2017-04-17
  • 加密與CA

    一次加密通訊流程: 1、生成數據 2、用單向加密數據生成特征碼 3、用自己的私鑰加密特征碼放在數據后面 4、生成臨時會話密鑰加密特征碼和數據 5、用對方的公鑰加密臨時密鑰 2、私有CA 構建私有CA     1、生成私鑰     2、自簽署證書 給節點發放證書     …

    Linux干貨 2017-02-13
  • 馬哥教育網絡班22期+第12周作業

    week11 1、請描述一次完整的http請求處理過程; 2、httpd所支持的處理模型有哪些,他們的分別使用于哪些環境。 3、源碼編譯安裝LAMP環境(基于wordpress程序),并寫出詳細的安裝、配置、測試過程。 4、建立httpd服務器(基于編譯的方式進行),要求:      提供兩個基于名稱的虛擬主…

    Linux干貨 2016-10-31
欧美性久久久久