第九周:shell腳本之判斷練習

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

#!/bin/bash
#
declare -i LoginUser=0
declare -i NologinUser=0
while read lines; do
        ShellType=${lines##*:}    # ${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所存儲的字符串中,最后一次出現的word分隔符,刪除字符串開頭至此分隔符之間的所有字符;
        if [ $ShellType == "/sbin/nologin" ]; then
                let NologinUser++
        else
                let LoginUser++
        fi
done < /etc/passwd
echo -e "Login Number:$LoginUser\nNologin Number:$NologinUser"

2、寫一個腳本

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

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

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

#!/bin/bash
#
hostname=$(hostname)
[ $hostname  == "localhost" ] &&  hostname www.magedu.com  || echo $hostname

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

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

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

#!/bin/bash
#
if [ $# -ne 1 ]; then
        echo "傳遞一個磁盤設備文件路徑給腳本,不多不少,就一個"
        exit 2
fi
if [ -b $1 ]; then    # 判斷是否為字符串設備,也可以用 -e,但是如果真的為一個文件路徑是,就出錯了
        fdisk -l $1
else
        echo "此磁盤設備不存在"
fi

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

腳本能夠接受一個參數;

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

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

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

#!/bin/bash
#
case $1 in
quit)
        echo "退出腳本"
        exit
        ;;
yes)
        echo "繼續執行腳本"
        ;;
*)
        exit 2
        ;;
esac

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
#
[ -d /backups ] || mkdir /backups
read -p "pelase input a argu(gzip/bzip2/xz):" argu

case $argu in
gzip)
        tar -Pzcf /backups/etc-`date +%Y%m%d`.tar.gz /etc # 加P,是整個目錄拷貝,不會提示“tar: 從成員名中刪除開頭的“/””
        ;;
bzip2)
        tar -Pjcf /backups/etc-`date +%Y%m%d`.tar.bz2 /etc
        ;;
xz)
        tar -PJcf /backups/etc-`date +%Y%m%d`.tar.xz /etc
        ;;
*)
        echo "error compression tools"
        ;;
esac

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

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

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

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

(4) 其它為無法判斷;

if [ $# -lt 1 ];then
  echo "please input a url"
fi
if [ -L $1 ];then
  echo "this is a access url"
elif [ -d $1 ];then
  echo "can use cd common"
elif [ -f $1 ];then
  echo "normal access"
else
 echo "unknow"
fi

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

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

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

#!/bin/bash
hostname=`hostname`
if [ $hostname == localhost -o $hostname == none ];then
  hostname mail.magedu.com
else
   echo $hostname
fi

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

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

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

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

#!/bin/bash
a=`id -u $1`
if ! grep "^$1\>" /etc/passwd &> /dev/null; then
 echo "no such user"
elif [ $a -eq 0 ];then
 echo "this is root"
elif [ $a -lt 500 ];then
echo "this system user"
else
  echo "this regular user"
fi

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

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

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

#!/bin/bash
if [ $# -lt 1 ];then
  echo "please input a agarument"
  exit 2
fi
if ! grep "^$1\>" /etc/passwd &> /dev/null;then
 echo "no such user"
 exit 3
fi
a=`id -u $1`
b=`grep -o "^user1\>.*sh$" /etc/passwd |grep -o sh`
if [ $a -ge 500 ] && [ $b == sh ];then
  echo "a user can log system"
else
   echo "can not login"
fi

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

(1)
dawningdawning
上一篇 2016-11-21
下一篇 2016-11-21

相關推薦

  • mysql復制與備份

    備份策略: 完全+差異+binlog 完全+增量+binlog binlog最好能實時備份到另一個節點上。 完全備份,多久一次? 數據變化量:有20%,建議使用完全備份。 可用的備份存儲空間: 數據變化量很大,可以每天做一個完全備份,每周做一次增量備份。 數據變化量不大,可以每月做一次完全備份,每天做一次增量或者差異。 數據 備份工具: mysqldump:…

    Linux干貨 2016-12-05
  • Linux系統上的文件處理工具

    Linux系統上的文件處理工具 我們都知道在計算機中,存在大量的文件,這些文件中包含大量的信息??墒怯行r候,為了工作的效率,我們在茫茫信息中提取出我們所需要的信息,這樣的技能就顯得尤為重要。Linux系統上為我我們提供了多種多樣的文本處理工具,下面我們來簡單說一下。 查看文件內容我們可以使用less命令,cat命令,more命令等等 cat cat [OP…

    Linux干貨 2016-08-05
  • rpm和yum

     1、rpm的安裝 rpm {-i|–install} [install-options] PACKAGE_FILE… -v: verbose -h: 以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE … [install-options] …

    Linux干貨 2016-08-21
  • bash腳本變量的使用

    bash腳本的變量使用詳解 變量的類型包括整數、字符串和數組,但在bash腳本編程中不需要指定類型就可以直接賦值,默認均為字符型,其參與運算會自動進行隱式類型轉換。 變量的賦值方式為:name='value',其中“=”兩邊一定不能有空格,如果變量值中包含有空格則需要使用引號引起來,需要注意的是強引用和弱引用的區分。此外變量的賦值也可以引…

    Linux干貨 2016-08-15
  • Linux初識

    一 .計算機的關鍵部位 cpu(運算器 控制器):正給計算機的中樞神經,對程序控制信息的處理和 對數據的運算 存儲器:存儲程序數據和各種信息指令 Input:起到將各個外部信息傳遞給計算機的作用 output:將計算機內部的各個信號數據及計算結果輸出 二 .一些主流Linux發行版簡介 linux發行版:linux只是一個操作系統,搭配其它軟件發行的系統就是…

    Linux干貨 2016-10-30
  • 關于 建立私有CA和申請證書

                               建立私有CA和申請證書            …

    系統運維 2016-09-23
欧美性久久久久