第九周練習

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

#!/bin/bash
#
nologin=$(awk -F: '$NF=="/sbin/nologin"{print $NF}' /etc/passwd | wc -l)
all=$(cat /etc/passwd | wc -l)
login=$[$all-$nologin]
echo "login user:$login,nologin user:$nologin"

2、寫一個腳本

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

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

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

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

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

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

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter,please try it again"
    exit 1
fi
for i in $*;do
    if [[ -a $i ]];then
        fdisk -l $i
    else
        echo "the path is not existing or not a block special"
    fi
done

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

腳本能夠接受一個參數;

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

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

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
if [[ "$1" == "quit" || "$1" == "QUIT" ]];then
    echo "This script is quiting"
    exit 0
elif [[ "$1" == "yes" || "$1" == "YES" ]];then
    echo "This script is still running"
else
    exit 2
fi

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
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
mkdir -pv /backups
if [[ "$1" == "gzip" || "$1" == "GZIP" ]];then
    tar -zcf /backups/etc-$(date +%Y%m%d).tar.gz /etc
elif [[ "$1" == "bzip2" || "$1" == "BZIP2" ]];then
    tar -jcf /backups/etc-$(date +%Y%m%d).tar.bz2 /etc
elif [[ "$1" == "xz" || "$1" == "XZ" ]];then
    tar -Jcf /backups/etc-$(date +%Y%m%d).tar.xz /etc
else
    echo "Error"
    exit 0
fi

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

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

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

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

(4) 其它為無法判斷;

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    if [ -f $i ];then
        echo "the file is normal"
    elif [ -d $i ];then
        echo "you can use cd enter this directory"
    elif [ -L $i ];then
        echo "the link is normal"
    else
        echo "unkown error"
    fi
done

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

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

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

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

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

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

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

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    uid=$(grep -E "^$i" /etc/passwd | cut -d: -f3)
    if [ $uid -eq 0 ];then
        echo "$i is root"
    elif [ $uid -ne 0 && $uid -lt 500 ];then
        echo "$i is a system user"
    else
        echo "$i is a common user"
    fi
done

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

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

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

#!/bin/bash
#
if [ $# -eq 0 ];then
    echo "At least one parameter"
    exit 1
fi
for i in $*;do
    uid=$(grep -E "^$i" /etc/passwd | cut -d: -f3)
    shell=$(grep -E "^$i" /etc/passwd | cut -d: -f7)
    if [[ $uid -ge 500 && "$shell" =~ .*sh ]];then
        echo "$i can login"
    else
        echo "$i can't login"
    fi
done

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

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

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

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

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

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

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

原創文章,作者:N24_澀味,如若轉載,請注明出處:http://www.www58058.com/64431

(0)
N24_澀味N24_澀味
上一篇 2016-12-21
下一篇 2016-12-21

相關推薦

  • 文件系統配額操作

    創建磁盤配額是實際工作中會遇到的內容,下面是一個磁盤配額的全部過程 一、總體步驟 1 啟用配額掛載選項 2 創建配額數據庫 3啟用數據庫 4指定用戶空間限制 5測試 6查詢 二、分步操作過程 (1)  查看獨立的磁盤(或者是分區) [root@localhoast ~]# lsblk NAME   …

    Linux干貨 2016-11-23
  • CentOS系統啟動流程與grub

    本文主要講述CenOS系統啟動的整個流程。 對于CentOS系統來說,整個啟動過程可分為4個階段,分別是:加點自檢,加載MBR,加載內核并執行初始化信息,初始化用戶空間。下面就具體來描述每個過程都做了什么。 一.加點自檢(power on system test,POST) 任何一種操作系統的啟動,第一步必定是加點自檢,主要功能是裝載在硬件芯片CMOS之上的…

    Linux干貨 2016-11-29
  • haproxy 簡單實現80轉后端8000

    一,安裝 yum -y install gcc automake autoconf libtool make tar -xzf haproxy-1.6.8 cd haproxy-1.6.8 make TARGET=linux2628 make install 二,編輯配置文件 Haproxy配置中分成五部分內容,當然這些組件不是必選的,可以根據需要選擇作為配…

    Linux干貨 2016-09-19
  • 第四周小結

    這周我們主要學習了寫腳本的簡單語法,寫了一些簡單的腳本,下面就由我來簡單介紹一下: 第一步使用文本編輯來創建腳本: 創建好后在里面寫想要運行的腳本即可,然后按Esc—wq退出保存即可。也可以按q不保存退出;q!不保存強制退出;wq!保存強制退出。 第二步運行腳本,給予執行權限,在命令行上指定腳本的相對路徑和絕對路徑 對了,當在腳本里輸入內容時,要Ese&#8…

    2017-08-06
  • 馬哥教育網絡班28期—第1、2天知識點概略

    沒做隨堂筆記,根據記憶手打,看看自己能記住多少。

    Linux干貨 2017-12-03
  • LAMP的分布式實現——安裝wordpress、phpMyAdmin

    題目:分別用三臺centos 7主機分別部署 httpd, php-fpm, mariadb 第一臺 10.1.43.101 –>httpd 第二臺 10.1.43.102 –>php-fpm    分別在2臺虛擬主機上部署wordpress和phpmyadmin 第三臺 10.1.43.103 &#8…

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