馬哥教育網絡班19期第九周課程練習
1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現;
#!/bin/bash
#
#count nologin
declare -i nologins=0
declare -i logins=0
file="/etc/passwd"
bashs=`cat $file | cut -f7 -d:`
for i in $bashs ; do
#echo $i
if [ $i == "/sbin/nologin" ]; then
let nologins++
else
let logins++
fi
done
echo "Total nologin bash shell : $nologins."
echo "Total login bash shell : $logins."
用awk實現,統計每個shell數量:
awk -F: '{bashs[$NF]++}END{for (i in bashs) {print "bash shell:"i,"\t bash shell count:"bashs[i]}}' /etc/passwd
cat /etc/passwd | awk -F: '{bashs[$NF]++}END{for (i in bashs) {print i,bashs[i]}}'
2、寫一個腳本
(1) 獲取當前主機的主機名,保存于hostname變量中;
(2) 判斷此變量的值是否為localhost,如果是,則將當前主機名修改為www.magedu.com;
(3) 否則,則顯示當前主機名;
#!/bin/bash
#
#change hostname
hostname=`hostname`
if [ $hostname == 'localhost' ]; then
hostname www.magedu.com
echo "hostname has change to 'www.magedu.com'. "
else
echo $hostname
fi
3、寫一個腳本,完成如下功能
(1) 傳遞一個磁盤設備文件路徑給腳本,判斷此設備是否存在;
(2) 如果存在,則顯示此設備上的所有分區信息;
#!/bin/bash
#
#show the dev info
readdevpath() {
read -p "Please input the driver path: " drivers
if [ $drivers = "quit" ]; then
exit 2
fi
if fdisk -l $drivers &> /dev/null ; then
fdisk -l $drivers
else
echo "invail driver"
readdevpath
fi
}
readdevpath
fdisk -l $drivers
4、寫一個腳本,完成如下功能
腳本能夠接受一個參數;
(1) 如果參數1為quit,則顯示退出腳本,并執行正常退出;
(2) 如果參數1為yes,則顯示繼續執行腳本;
(3) 否則,參數1為其它任意值,均執行非正常退出;
#!/bin/bash
#
#arg select
if [ $# -lt 1 ]; then
echo "<1"
exit 2
fi
case $1 in
quit)
echo "Exit…"
exit 0;;
yes)
echo "continue…";;
*)
echo "oh no!"
exit 4;;
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
#
#case tar bzip xz
if [ $# -lt 1 ]; then
echo "Userage: `basename $0` gzip|bzip2|xz "
exit 2
fi
case $1 in
gzip)
mkdir /backups &> /dev/null
tar czvf /backups/etc-20160613.tar.gz /etc &> /dev/null
echo "tar gzip Backup /etc succesful!"
;;
bzip2)
mkdir /backups &> /dev/null
tar cjvf /backups/etc-20160613.tar.bz2 /etc &> /dev/null
echo "tar bz2 Backup /etc succesful!"
;;
xz)
mkdir /backups &> /dev/null
tar cJvf /backups/etc-20160613.tar.xz /etc &> /dev/null
echo "tar xz Backup /etc succesful!"
;;
*)
echo "Tar Err!"
echo "Userage: `basename $0` gzip|bzip2|xz "
exit 2
esac
6、寫一個腳本,接受一個路徑參數:
(1) 如果為普通文件,則說明其可被正常訪問;
(2) 如果是目錄文件,則說明可對其使用cd命令;
(3) 如果為符號鏈接文件,則說明是個訪問路徑;
(4) 其它為無法判斷;
#!/bin/bash
#
#file type
if [ $# -lt 1 ]; then
echo "Usare: `basename $0` arg (as a filename with path)."
exit 2
fi
if [ -f $1 ]; then
echo "$1 is a file"
elif
[ -s $1 ]; then
echo "$1 is a symbolic link file."
elif
[ -d $1 ]; then
echo "$1 is a directory.you can use 'cd $1' change to it. "
else
echo "Unknow file type."
fi
7、寫一個腳本,取得當前主機的主機名,判斷
(1) 如果主機名為空或為localhost,或為""(none)"",則將其命名為mail.magedu.com;
(2) 否則,顯示現有的主機名即可;
#!/bin/bash
#
#change hostname
ChangeHostName() {
hostname mail.magedu.com
echo "hostname has change to 'mail.magedu.com'. "
}
hostname=`hostname`
if [ $hostname == "localhost" ]; then
ChangeHostName
elif
[ $hostname == "none" ]; then
ChangeHostName
else
echo "HOST Name: "$hostname
fi
8、寫一腳本,接受一個用戶名為參數;
(1) 如果用戶的id號為0,則顯示其為管理員;
(2) 如果用戶的id號大于0且小于500, 則顯示其為系統用戶;
(3) 否則,則顯示其為普通用戶;
#!/bin/bash
#
#echo then user id info
declare -i i_uid
declare -i uid_type
if [ $# -lt 1 ]; then
echo "\"Userage: `basename $0` args.\" args for username."
fi
if id $1 &> /dev/null ; then
i_uid=`id -u $1`
if [ $i_uid -eq 0 ]; then
uid_type=0
elif
[ $i_uid -lt 501 ]; then
uid_type=1
else
uid_type=2
fi
case $uid_type in
0)
echo "User:$1 is root user."
;;
1)
echo "User:$1 is a system user."
;;
*)
echo "User:$1 is a comma user."
esac
else
echo "$1: No such user!"
fi
10、寫一個腳本,傳遞一個用戶名參數給腳本;
(1) 如果用戶的id號大于等于500,且其默認shell為以sh結尾的字符串,則顯示“a user can log system.”類的字符串;
(2) 否則,則顯示無法登錄系統;
#!/bin/bash
#
#echo shell can be login into system
declare -i idno
if [ $# -lt 1 ]; then
echo "Useage: `basename $0` args .(args for username)"
exit 2
fi
if id $1 &> /dev/null ; then
idno=`id -u $1`
if [ $idno -ge 500 ] ; then
if `grep $1 /etc/passwd | grep sh$ &> /dev/null` ; then
echo "User:$1 can log system."
else
echo "User:$1 can not login to system."
fi
else
echo "User:$1 can not login to system."
fi
else
echo "$1: no such user!"
fi
11、寫一個腳本,完成如下任務 :
(1) 按順序分別復制/var/log目錄下的每個直接文件或子目錄至/tmp/test1-testn目錄中;
(2) 復制目錄時,才使用cp -r命令;
(3) 復制文件時使用cp命令;
(4) 復制鏈接文件時使用cp -d命令;
(5) 余下的所有類型,使用cp -a命令;
#!/bin/bash
#
#copy file to /tmp/test1-testn
sdir=/var/log
ddir=/tmp/test1-testn
files=`ls $sdir`
if [ ! -d $ddir ]; then
mkdir -pv $ddir
fi
cd $sdir
for i in $files ; do
if [ -L $i ] ; then
filetype="s"
elif
[ -d $i ] ; then
filetype="d"
elif
[ -f $i ] ; then
filetype="f"
else
filetype="o"
fi
case $filetype in
s)
cp -d $i $ddir
# echo "cp -d $i"
;;
d)
cp -r $i $ddir
# echo "cp -r $i"
;;
f)
cp $i $ddir
# echo "cp $i"
;;
*)
cp -a $i $ddir
# echo "cp -a $i"
;;
esac
done
原創文章,作者:馬哥Net19_小斌斌,如若轉載,請注明出處:http://www.www58058.com/22027
寫的很好,排版還可以在漂亮一點,加油
@馬哥教育:排版一提交就變了,有什么方法可以排得好點呢?