linux脚本练习-1

脚本01.sh:

1、设定变量FILE的值为/etc/passwd

2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:  

Hello, root, your shell: /bin/bash

3、统计一共有多少个用户


#!/bin/bash
#
FILE=/etc/passwd
UNAMES=`cut -d ":" -f 1 /etc/passwd`
SHELLS=`cut -d ":" -f 7 /etc/passwd`
NUM="echo $UNAMES | wc -w"
#echo $UNAMES
#echo $SHELLS
#echo $NUM
for I in `seq 1 $NUM`;do
    UNAME=`echo $UNAMES | cut -d " " -f $I`
    SHELL=`echo $SHELLS | cut -d " " -f $I`
    echo "Hello $UNAME,your shell is $SHELL"
  done
echo "total $NUM users."


脚本02.sh:

添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;

扩展:

接受一个参数:

add: 添加用户user1..user10

del: 删除用户user1..user10

#!/bin/bash
#
case $1 in
--add|-a)
  for I in `seq 1 10`;do
     if ! id user$I &> /dev/null;then
         useradd user$I &> /dev/null
         echo "user$I" | passwd --stdin user$I &> /dev/null
         echo "user$I creat successful."
     else
         echo "user$I exist."
     fi
  done
  ;;
  --del|-d)
  for I in `seq 1 10`;do
     if id user$I &> /dev/null;then
          userdel -r user$I &>/dev/null
          echo "user$I delete successful."
     else
          echo "user$I exist."
     fi
   done
   ;;
   *)
       echo "Unknow commend,-a for add ,-d for delete."
  esac


脚本03.sh:

计算100以内所有能被3整除的正整数的和;

#!/bin/bash
#
SUM=0
for I in `seq 0 3 100`;don
    SUM=$[$SUM+$I]
done
    echo "$SUM"


脚本04.sh:

计算100以内所有奇数的和以及所有偶数的和;分别显示之;

#!/bin/bash
#
I=0
SUM1=0
SUM2=0
for I in `seq 0 2 100`;do
    SUM1=$[$SUM1+$I]
done

for I in `seq 1 2 100`;do
    SUM2=$[$SUM2+$I]
done
    echo "ou SUM1=$SUM1"
    echo "ji SUM2=$SUM2"


脚本05.sh:

写一个脚本22,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:

BASH,3users,they are:

root,redhat,gentoo


NOLOGIN, 2users, they are:

bin,ftp

#!/bin/bash
#
echo -e "BASH,`grep /bash /etc/passwd | wc -l` users,they are :\n `grep /bash /etc/passwd  | cut -d ":" -f 1 | tr "\n" ","`"
echo -e "NOLOGIN,`grep /sbin/nologin /etc/passwd | wc -l` users,they are : \n `grep /sbin/nologin /etc/passwd | cut -d ":" -f 1 | tr "\n" ","`"


脚本06.sh:

给定一个用户:

1、如果其UID为0,就显示此为管理员;

2、否则,就显示其为普通用户;

#!/bin/bash
#
read -p "Please input your user name:" NAME
UID=`id -u $NAME` 
([ $UID == 0 ] && echo "You are admin." || echo "You are not admin."


脚本07.sh:

判断当前系统上是否有用户的默认shell为bash;

如果有,就显示有多少个这类用户;否则,就显示没有这类用户;

#!/bin/bash
#
(`grep /bash /etc/passwd &> /dev/null` && echo "`grep /bash /etc/passwd | wc -l `users using BASH.") || echo "no users using BASH."


脚本08.sh:

给定一个文件,比如/etc/rc.d/rc.sysinit

判断这个文件中是否有空白行;

如果有,则显示其空白行数;否则,显示没有空白行。

#!/bin/bash
#
FILE=/etc/rc.d/rc.sysinit
grep ^$ $FILE &> /dev/null && echo "there are `grep ^$ $FILE | wc -l` blank lines." || echo "no blank lines."

    笔记:查找空白行的表示方法用“^$”,例“grep ^$ /etc/rc.d/rc.sysinit”


脚本09.sh:

给定一个用户,判断其UID与GID是否一样。

如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。

扩展:不使用id命令获得其id号;

#!/bin/bash
#
read -p "Please input your username:" NAME
grep ^$NAME /etc/passwd &> /dev/null
if [ $? != 0 ];then
    echo "no such user"
else
    UNAME=`grep ^$NAME /etc/passwd &> /dev/null | cut -d ":" -f 3`
    GNAME=`grep ^$NAME /etc/passwd &> /dev/null | cut -d ":" -f 4` 
    if [ $UNAME == $GNAME ] ; then
        echo "GOOD BOY!"
    else 
        echo "BAD BOY!"
    fi
fi

    笔记:$0:脚本本身。$1:第一个参数。$2:第二个参数。。。。$#:传递到脚本的参数个数。$?:命令执行状态返回值,0表示成功,其他表示失败; 如果变量赋值为一些命令的执行结果,则命令用反引号引起来。


脚本10.sh:

给定一个用户,获取其密码警告期限;

而后判断用户密码使用期限是否已经小于警告期限;

提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限;

如果小于,则显示“Warning”;否则,就显示“OK”。

#!/bin/bash
#
read -p "Please input your username: " NAME
grep ^$NAME /etc/passwd &> /dev/null
if [ $? != 0 ];then
    echo "no such user"
else
    WARN_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 6`
    MAX_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 5`
    CHANG_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 3`
    TONEW_TIME_S=`date +%s`
    TONEW_TIME_D=$[$TONEW_TIME_S/86400]
    TIME=$[$MAX_TIME-($TONEW_TIME_D-$CHANG_TIME)]
    
    if [ $TIME -lt $WARN_TIME ];then
        echo "Warning"
    else
        echo "OK"
    fi
 fi


脚本11.sh:

判定命令历史中历史命令的总条目是否大于1000;

如果大于,则显示“Some command will gone.”;否则显示“OK”。

#!/bin/bash
#
I=`history | wc -l`
if [ $I -gt 1000 ];then
    echo "Some command will gone"
else
    echo "OK"
fi



你可能感兴趣的:(linux,统计,密码,用户名)