N25-第9周博客作業

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

#!/bin/bash
# 統計登錄用戶和非登陸用戶的個數
# author: han

declare -i loginnum=0
declare -i nologinnum=0

while read line;do
        if [[ "${line}" =~ "/sbin/nologin" ]];then
                let nologinnum++
        else
                let loginnum++
        fi
done < /etc/passwd

echo "可登錄shell用戶數: $loginnum"
echo "非登陸sheel用戶數: $nologinnum"

執行結果: 
[root@localhost scripts]# bash loginshell.sh
可登錄shell用戶數: 8
非登陸sheel用戶數: 19

驗證: 
[root@localhost scripts]# grep "/sbin/nologin$" /etc/passwd | wc -l
19
[root@localhost scripts]# grep -v "/sbin/nologin$" /etc/passwd | wc -l
8

2、寫一個腳本

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

#!/bin/bash
#description: 顯示當前主機名

hostname=$(hostname)
# 因為默認主機名是"localhost.localdomain",所以做了模式匹配
if [[ "$hostname" =~ "localhost" ]];then
        hostnamectl set-hostname www.magedu.com && echo "主機名已修改"
else
        hostname && echo 主機名未修改""
fi


執行結果: 
[root@localhost scripts]# bash hostname.sh 
主機名已修改
[root@localhost scripts]# hostname
www.magedu.com
[root@www scripts]# bash hostname.sh 
www.magedu.com
主機名未修改

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

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

#!/bin/bash
#description: 顯示磁盤所有分區信息
#author: han

if [ $# -lt 1 ];then
        echo "請輸入一個磁盤路徑"
        exit 1
fi

if [ -b $1 ];then
        fdisk -l $1
else
        echo "文件不存在或不是磁盤文件"
fi

執行結果: 
[root@www scripts]# bash disk.sh /dev/sda

磁盤 /dev/sda:107.4 GB, 107374182400 字節,209715200 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0x000a61b9

   設備 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1050623      524288   83  Linux
/dev/sda2         1050624   105908223    52428800   83  Linux
/dev/sda3       105908224   126879743    10485760   83  Linux
/dev/sda4       126879744   209715199    41417728    5  Extended
/dev/sda5       126881792   128929791     1024000   82  Linux swap / Solaris
/dev/sda6       128931840   149903359    10485760   83  Linux

[root@www scripts]# bash disk.sh /dddd
文件不存在或不是磁盤文件
[root@www scripts]# bash disk.sh /etc
文件不存在或不是磁盤文件

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

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

#!/bin/bash
#description:判斷接收的參數,決定下面的行為
#author: han

if [ $# -lt 1 ];then
        echo "請輸入一個參數"
        exit 1
fi

case $1 in
quit)
        echo "退出腳本"
        exit 0
        ;;
yes)
        echo "繼續執行腳本"
        ;;
*)
        exit 2
        ;;
esac

執行結果:
[root@www scripts]# bash ajust.sh quit
退出腳本
[root@www scripts]# bash ajust.sh yes
繼續執行腳本
[root@www scripts]# bash ajust.sh ok
[root@www scripts]#

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
#description: 根據參數選擇合適的工具進行歸檔壓縮
#han
[ $# -lt 1 ] && echo "請輸入一種壓縮工具" && exit 1

if [ ! -d /backups ];then
        mkdir /backups
fi

case $1  in
gzip)
        tar zcf /backups/etc-`date +%Y%m%d`.tar.gz /etc
        ;;
bzip2)
        tar jcf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
        ;;
xz)
        tar Jcf /backups/etc-`date +%Y%m%d`.tar.xz /etc
        ;;
*)
        echo "錯誤壓縮工具"
        exit 2
esac

執行結果:
[root@www scripts]# bash compress.sh 
請輸入一種壓縮工具
[root@www scripts]# bash compress.sh ddd
錯誤壓縮工具
[root@www scripts]# bash compress.sh gzip
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# bash compress.sh bzip2
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# bash compress.sh xz
tar: 從成員名中刪除開頭的“/”
[root@www scripts]# ls /backups/
etc-20170220.tar.bz2  etc-20170220.tar.gz  etc-20170220.tar.xz

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

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

#!/bin/bash
#description: 判斷文件類型
#author: han

[ $# -lt 1 ] && echo "請輸入一個路徑參數" && exit 1

#注意對符號鏈接的判斷需放在普通文件前面,否則會被識別為普通文件
if [ -h $1 ];then
        echo "$1是個訪問路徑"
elif [ -f $1 ];then
        echo "$1可被正常訪問"
elif [ -d $1 ];then
        echo "$1可以使用cd命令"
else
        echo "無法判斷"
fi

執行結果:
[root@www scripts]# bash filetype.sh 
請輸入一個路徑參數
[root@www scripts]# bash filetype.sh /etc/inittab 
/etc/inittab可被正常訪問
[root@www scripts]# bash filetype.sh /etc/
/etc/可以使用cd命令
[root@www scripts]# bash filetype.sh /etc/sysconfig/selinux 
/etc/sysconfig/selinux是個訪問路徑
[root@www scripts]# bash filetype.sh /dev/sda
無法判斷

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

(1) 如果主機名為空或為localhost,或為”(none)”,則將其命名為mail.magedu.com;
(2) 否則,顯示現有的主機名即可;

#!/bin/bash
#descriptions: 判斷主機名
#author: han

hostname=`hostname`

if [[ -z "$hostname" ]] || [[ "$hostname" =~ "localhost" ]] || [[ "$hostname" == "(none)" ]];then
        hostnamectl set-hostname mail.magedu.com && echo "主機名已修改"
else
        hostname && echo "主機名未修改"
fi

執行結果:
[root@www scripts]# hostname
mail.magedu.com
[root@www scripts]# bash hostname2.sh 
mail.magedu.com
主機名未修改
[root@www scripts]# hostname localhost.localdomain
[root@www scripts]# bash hostname2.sh 
主機名已修改
[root@www scripts]# hostname
mail.magedu.com  

注意: 
1. centos7 配置該"(none)"時報錯, 因為小括號為非法字符
[root@www scripts]# hostname "(none)"
hostname: the specified hostname is invalid
2. 在centos6上運行成功,hostnamectl改為hostname命令即可  
3. 表達式兩邊需加空格,在這兒浪費了很長時間

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

(1)
oranixoranix
上一篇 2017-03-10
下一篇 2017-03-10

相關推薦

  • sed與vim相關練習

    sed 練習 以行為單位的新增/刪除功能 1將 /etc/passwd 的內容列出并且打印行號,同時,請將第 2~5 行刪除! 2在第二行后(亦即是加在第三行)加上“the is xing line?”字樣! 3在第二行前(亦即是加在第而行)加上“the is xing line?”字樣! 4在第二行后面加入兩行字,例如“the is xing line &…

    Linux干貨 2016-08-10
  • 馬哥教育網絡版22期+第10周作業

    week10 1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 2、為運行于虛擬機上的CentOS 6添加一塊新硬件,提供兩個主分區;   (1) 為硬盤新建兩個主分區;并為其安裝grub;   (2) 為硬盤的第一個主分區提供內核和ramdisk文件;&nbsp…

    Linux干貨 2016-10-29
  • 網絡班N22期第一周博客作業

    一、計算機的組成及功能。  計算機是由硬件系統和軟件系統兩部分組成的。 1、硬件系統包含:    (1)、主板。又叫主機板(mainboard)、系統板(systemboard)或母板(motherboard),它安裝在機箱內,是微機最基本的也是最重要的部件之一,主板一般為矩形電路板,上面安裝了組成計算機的主要電路系統,一般有B…

    Linux干貨 2016-08-15
  • inotify+rsync同步方案(ubuntu,適用其他發行版)

    系統:Ubuntu 16.04.1  工具:rsync 3.1.1 、inotify -tools 3.14      作者:jevtse    本文除了軟件安裝部分,其他內容同樣適用其他linux系統;同步目標主機:172.16.250.…

    2017-03-05
  • CA證書服務搭建與申請

    服務端根CA創建證書 進入固定目錄,創建所需要的文件 cd /etc/pki/CA/ touch /etc/pki/CA/index.txt 生成證書索引數據庫文件 echo 01 > /etc/pki/CA/serial 指定第一個頒發證書的序列號 生成秘鑰 (umask 066;openssl genrsa -out /etc/pki/CA/pri…

    2017-09-11
  • 第一周

    1、描述計算機的組成與功能 計算器是由運算器,控制器,存儲器,輸入設備和輸出設備五大部件組成;每一部件分別按要求執行特定的功能,具體功能如下: (1)運算器:完成各種算術運算和邏輯運算的裝置,能進行加、減、乘、除等數學運算,也能作比較、判斷、查找、邏輯運算等。 (2)控制器:控制器是計算機機指揮和控制其它各部分工作的中心,其工作過程和人的大腦指揮和控制人的各…

    Linux干貨 2017-01-02
欧美性久久久久