1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现;

#!/bin/bash
login=`grep -v '/sbin/nologin$' /etc/passwd | wc -l`
nologin=`grep '/sbin/nologin$' /etc/passwd | wc -l`
echo "可登录用户共$login"
echo "不可登录用户共$nologin"


二、写一个脚本

(1) 获取当前主机的主机名,保存于hostname变量中;

(2) 判断此变量的值是否为localhost,如果是,则将当前主机名修改为www.magedu.com;

(3) 否则,则显示当前主机名;

#!/bin/bash
hn=`hostname`
if [[ $hn == "localhost" ]];then
    hostname wwww.magedu.com
else
    echo $hn
fi


三、写一个脚本,完成如下功能

(1) 传递一个磁盘设备文件路径给脚本,判断此设备是否存在;

(2) 如果存在,则显示此设备上的所有分区信息;

[root@localhost shell]# cat disk.sh 
#!/bin/bash
disk=`fdisk -l | grep -o "^磁盘 /dev/sd[a-z]" | awk '{print $2}'`
for i in $disk
do
echo "磁盘设备$i"
        partition=`fdisk -l | egrep -o "^${i}[1-9]"`
        df -h $partition
        echo
done
 
[root@localhost shell]# ./disk.sh 
磁盘设备/dev/sda
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1       477M   94M  354M   21% /boot
/dev/sda2        75G  1.6G   69G    3% /
devtmpfs        1.9G     0  1.9G    0% /dev
 
磁盘设备/dev/sdc
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdc1       9.8G   37M  9.2G    1% /data2
/dev/sdc2       9.8G   37M  9.2G    1% /data3
 
磁盘设备/dev/sdb
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       9.8G   37M  9.2G    1% /data1


四、写一个脚本,完成如下功能

脚本能够接受一个参数;

(1) 如果参数1为quit,则显示退出脚本,并执行正常退出;

(2) 如果参数1为yes,则显示继续执行脚本;

(3) 否则,参数1为其它任意值,均执行非正常退出;

#!/bin/bash
read -p "please input option:" option
case $option in
quit)
    echo "quit"
    exit 0;;
yes)
    echo "continue";;
*)
    echo "error"
    exit 1;;
esac


五、写一个脚本,完成如下功能

传递一个参数给脚本,此参数为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
read -p "Please select the compression format in (gzip|bzip2|xz)" option
case $option in
gzip)
        tar -zcf /backups/etc-`date "+%Y%m%d"`.tar.gz /etc &> /dev/null
        ;;
bzip2)
        tar -jcf /backups/etc-`date "+%Y%m%d"`.tar.bz2 /etc &> /dev/null
        ;;
xz)
        tar -Jcf /backups/etc-tar -`date "+%Y%m%d"`.tar.xz /etc &> /dev/null
        ;;
*)
        echo "error!"
        exit 1
        ;;
esac


六、写一个脚本,接受一个路径参数:

(1) 如果为普通文件,则说明其可被正常访问;

(2) 如果是目录文件,则说明可对其使用cd命令;

(3) 如果为符号链接文件,则说明是个访问路径;

(4) 其它为无法判断;

#!/bin/bash
read -p "Please enter a path:" path
if [ -f $path ];then
        echo "files Accessible"
elif [ -d $path ];then
        echo "Directory accessible"
elif [ -h $path ];then
        echo "This is path"
else
        echo "something error"
fi


七、写一个脚本,取得当前主机的主机名,判断

(1) 如果主机名为空或为localhost,或为"(none)",则将其命名为mail.magedu.com;

(2) 否则,显示现有的主机名即可;

#!/bin/bash
hn=`hostname`
if [[ -z $hn -o $hn == "localhost" -o $hn == "(none)" ]];then
    hostname mail.magedu.com
    echo "修改主机名为:mail.magedu.com"
else
    echo "当前主机名为:$hn"


8、写一脚本,接受一个用户名为参数;

(1) 如果用户的id号为0,则显示其为管理员;

(2) 如果用户的id号大于0且小于500, 则显示其为系统用户;

(3) 否则,则显示其为普通用户;

#!/bin/bash
while true
do
read -p "Please enter a username:" username
if ! id $username &>/dev/null;then
echo "没有此用户"
else
break
fi
done
userid=$(id -u $username)
if [[ $userid -eq 0 ]];then
        echo "$username是管理员"
elif [[ $userid -lt 500 ]];then
       echo "$username是系统用户"
else
       echo "$username是普通用户"
fi