最近在复习写脚本,碰到了许多问题,和大家分享,巩固下

回复 收藏
1:
写个循环
user1创建到user10   ,用户存在不创建,密码同用户,
接受一个参数
add: 创建用户
del:删除用户
其他:报错



2:计算 100以内  能被3整除的数的和
%取余



3:
随机生成10个数,挑选出最大的和最小的


4:
分别统计,默认shell 各有多少用户,别分别列出用户:
格式:
/bin/bash :  3users   user1 user2 user3
/sbin/nologin
/sbin/halt
/bin/sync
/sbin/shutdown
2015-02-27 22:19 举报
已邀请:
0

李昂

赞同来自:

1:
if [ $1 == 'add' ];then
        for I in `seq 10`;do
                if ! id "user$I" &>/dev/null;then

                useradd  "user$I" && echo "user$I" | passwd --stdin "user$I" &>/dev/null
                echo "user$I chuangjian chenggong"
                else
                echo "user$I yi cunzai  wu fa chuangjian"
                fi
        done
elif     [ $1 == 'del' ];then
        for U in `seq 10`;do
        if id "user$U"&>/dev/null;then

        userdel -r "user$U" &&echo "user$U shanchu chenggong" &>/dev/null
        echo "user$U shanchu chenggong"
        else
        echo "user$U bu cunzai"
        fi
        done
else
        echo "cuowu"
        exit 10
fi

0

李昂

赞同来自:

2:
M=0
for I in `seq 100`;do
         N=$[ $I%3 ]                                                 注: 在取余的时候 需要 运算  所以需要加运算符号 $[ ]
#       echo $N
         if [  "$N" -eq 0 ];then
                M=$[ $M + $I ]
        fi
0

李昂

赞同来自:

3:

declare -i M=0
declare -i F=10000000000
for I in `seq 10`;do
    N=$RANDOM

if [ $N -gt $M ];then
        M=$N
elif [ $N -lt $F ];then
        F=$N
fi
done
echo "zui da de shi$M"
echo "zui xiao de shi $F"
0

李昂

赞同来自:

第四题 一直写不出来, 求大神支持,求教
0

wuhen

赞同来自:

本帖最后由 wuhen 于 2015-2-28 18:56 编辑


  1. 1、#!/bin/bash
  2. read -p "Please you input a character(add or del or any): " n
  3. case $n in
  4. add)
  5. for i in `seq 1 3`
  6. do
  7. grep -q user$i /etc/passwd
  8. if [ $? -ne 0 ]
  9. then
  10. useradd user$i
  11. echo "user$i"|passwd --stdin user$i
  12. else
  13. echo "user$i already exist"
  14. fi
  15. done
  16. ;;
  17. del)
  18. for j in `seq 1 3`
  19. do
  20. userdel -r user$j
  21. done
  22. ;;
  23. *)
  24. echo "you input flase"
  25. ;;
  26. esac
  1. 2、#!/bin/bash
  2. sum=0
  3. for i in `seq 1 100`
  4. do
  5. if [ $[$i%3] -eq 0 ]
  6. then
  7. sum=$[$i+$sum]
  8. fi
  9. done
  10. echo "sum is:" $sum
  1. 3、#!/bin/bash
  2. M=0
  3. N=100000
  4. for i in `seq 1 3`
  5. do
  6. a=`echo $RANDOM`
  7. if [ $a -gt $M ]
  8. then
  9. M=$a
  10. elif [ $a -lt $N ]
  11. then
  12. N=$a
  13. fi
  14. done
  15. echo "zui da de" $M
  16. echo "zui xiao de" $N
  1. 4、#!/bin/bash
  2. a1=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2" "$1}'|sed -n '1p'`
  3. a2=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2}'|sed -n '1p'`
  4. a3=`awk -F: '{print $1" "$7}' /etc/passwd|grep $a2|awk '{print $1}'`
  5. echo "$a1 $a3"
  6. b1=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2" "$1}'|sed -n '2p'`
  7. b2=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2}'|sed -n '2p'`
  8. b3=`awk -F: '{print $1" "$7}' /etc/passwd|grep $b2|awk '{print $1}'`
  9. echo "$b1 $b3"
  10. c1=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2" "$1}'|sed -n '3p'`
  11. c2=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2}'|sed -n '3p'`
  12. c3=`awk -F: '{print $1" "$7}' /etc/passwd|grep $c2|awk '{print $1}'`
  13. echo "$c1 $c3"
  14. d1=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2" "$1}'|sed -n '4p'`
  15. d2=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2}'|sed -n '4p'`
  16. d3=`awk -F: '{print $1" "$7}' /etc/passwd|grep $d2|awk '{print $1}'`
  17. echo "$d1 $d3"
  18. e1=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2" "$1}'|sed -n '5p'`
  19. e2=`awk -F: '{print $7}' /etc/passwd|sort -n|uniq -c|sort -n|awk '{print $2}'|sed -n '5p'`
  20. e3=`awk -F: '{print $1" "$7}' /etc/passwd|grep $e2|awk '{print $1}'|xargs`
  21. echo "$e1 $e3"



0

李昂

赞同来自:

最后一题  今天写到了这里 但是 结果 还是 不对 明天继续研究


#!/bin/bash
#
> /xbash/1.txt
Number=`wc -l /etc/passwd | awk -F " " '{print $1}'`

for I in `seq "$Number"`;do
        N=`head -$I /etc/passwd | awk -F : '{print $NF}' | sed "$"p -n`
        M=`head -$I /etc/passwd | awk -F : '{print $1}' | sed "$"p -n`
        if [[ $N == "/bin/bash" ]];then
                echo "/bin/bash: $M" >>/xbash/1.txt
        elif [[ $N == "/sbin/nologin" ]];then
                echo "/sbin/nologin: $M" >>/xbash/1.txt
        elif [[ $N == "/sbin/halt" ]];then
                echo "/sbin/halt: $M" >>/xbash/1.txt
        elif [[ $N == "/bin/sync" ]];then
                echo "/bin/sync: $M" >>/xbash/1.txt
        elif [[ $N == "/sbin/shutdown" ]];then
                echo "/sbin/shutdown: $M" >>/xbash/1.txt
        else
                echo "no"
        fi
done

#bin/bash
shu1=0
#sbin/nologin
shu2=0
#sbin/nologin
shu3=0
#sbin/halt
shu4=0
#bin/sunc
shu5=0
#sbin/shutdown
shu6=0
NB=`wc -l /xbash/1.txt | awk -F " " '{print $1}'`
for P in `seq "$NB"`;do
        N1=`head -$P /xbash/1.txt | sed "$"p -n | awk -F ":" '{print $1}'`

        if [[ $N1 == "/bin/bash" ]];then
                shu1+=$P
        elif [[ $N1 == "/sbin/nologin" ]];then
                shu2+=$P
        elif [[ $N1 == "/sbin/halt" ]];then
                shu3+=$P
        elif [[ $N1 == "/bin/sunc" ]];then
                shu4+=$P
        elif [[ $N == "/sbin/shutdown" ]];then
                shu5+=$P
        else
                echo "no2"
        fi
done
        echo "/bin/bash: "$shu1"users"
         echo "/sbin/nologin: "$shu2"users"
        echo "/sbin/halt: "$shu3"users"
        echo "/bin/sync: "$shu4"users"
        echo "/sbin/shutdown: "$shu5"users"
0

李昂

赞同来自:

先 touch 一个 1.txt
然后 执行 sh 是这样的

[root@localhost xbash]# !sh
sh paisuser.sh
no2
no2
/bin/bash: 01users
/sbin/nologin: 023459101112131415161718192021users
/sbin/halt: 08users
/bin/sync: 0users
/sbin/shutdown: 0users
0

李昂

赞同来自:

结果 必然不对。
cat /xbash/1.txt

/bin/bash: root
/sbin/nologin: bin
/sbin/nologin: daemon
/sbin/nologin: adm
/sbin/nologin: lp
/bin/sync: sync
/sbin/shutdown: shutdown
/sbin/halt: halt
/sbin/nologin: mail
/sbin/nologin: uucp
/sbin/nologin: operator
/sbin/nologin: games
/sbin/nologin: gopher
/sbin/nologin: ftp
/sbin/nologin: nobody
/sbin/nologin: vcsa
/sbin/nologin: saslauth
/sbin/nologin: postfix
/sbin/nologin: sshd
/sbin/nologin: mysql
/sbin/nologin: deamon
0

王肖强

赞同来自:

cc.png

  1. #!/bin/bash

  2. filename=/etc/passwd

  3. shell=(`awk -F : '{shell[$NF]++} END {for (i in shell) print i}' $filename`)
  4. shell1=(`awk -F : '{shell[$NF]++} END {for (i in shell) print i"_"shell[i]"_Users"}' $filename`)

  5. length=${#shell[@]}

  6. for ((i=0;i<$length;i++))
  7.   {
  8.     echo ${shell1[$i]} `awk -F : '$NF~"'${shell[$i]}'"{print $1}' $filename`
  9. }

  10. # End

## 水平有限,望海涵 !!!
0

李昂

赞同来自:

王肖强 发表于 2015-3-2 23:45
## 水平有限,望海涵 !!!

{:4_102:}写的太好了  这么短的几行就搞定了。。
我那都写了一大片也不行,差距啊。
0

hangtiangazi

赞同来自:

王肖强 发表于 2015-3-2 23:45
## 水平有限,望海涵 !!!

大师兄,方便加我qq我向你,请教点问题可以啊。1350042817
0

hangtiangazi

赞同来自:

本帖最后由 hangtiangazi 于 2015-3-16 17:42 编辑
王肖强 发表于 2015-3-2 23:45
## 水平有限,望海涵 !!!

http://www.aminglinux.com/bbs/ ... xnone
能帮我解释一下这个是什么意思?
0

hangtiangazi

赞同来自:

1.#!/bin/bash ## add or delete user read -p "Please input an character(add del or others): " character case $character in    add)          for i in `seq 1 10`;do                  chr2=awk -F: '$1==“‘user$i’“ {print $1}' /etc/passwd                  if [ -z $chr2 ];then                    useradd user"$i"                    echo -e ”user$i\nuser$i\nuser$i” |passwd --stdin user$i                  else                    echo "user$i已经存在,add"                    continue                  fi          done          ;;          del)         for i in `seq 1 10`;do                  chr2=awk -F: '$1==”‘user$i’“{ print $1}' /etc/passwd                  if [ -z $chr2 ];then                    echo "你查找的用户不存在,无需删除!"                    continue                  else                    userdel user$i                    echo "user$i 删除成功"                  fi          done          ;;          *)          echo "your input is false"          ;;          esac          
0

hangtiangazi

赞同来自:

1
0

hangtiangazi

赞同来自:

2
  1. #!/bin/bash
  2. ##test2
  3. for i in `seq 1 100`;do
  4.   a=$[$i%3]
  5.   if[ $a -eq 0 ]; then
  6.      sum=$[$sum+$i]
  7.   else
  8.     continue
  9. fi
  10. done
  11. echo $sum


0

定海偶然

赞同来自:

  • #!/bin/bash
  • ##
  • sum=0
  • for i in `seq 1 100`
  • do
  •            if [ $[$i%3] -eq 0 ];then
  •                       sum=$[$sum+$i]
  •            fi
  • done
  • echo $sum;
0

hangtiangazi

赞同来自:

3
  1. #!/bin/bash
  2. ##test3
  3. for i in `seq 0 9``;do
  4. arry[$i]=`echo $RANDOM`
  5. echo ${arry[$i]}
  6. done
  7. max=${arry[0]}
  8. min=${arry[0]}
  9. for j in {1..9};do
  10. if [ ${arry[$j]} -gt $max ];then
  11.         max=${arry[$j]}
  12. elif [ ${arry[$j]} -lt $min ]; then
  13.    min=${arry[$j]}
  14. fi
  15. done
  16. echo "10个随机数的最大值是$max,最小值是$min”


0

hangtiangazi

赞同来自:

3
  1.   1 #for i in `seq 1 10`;do
  2.   2 #!/bin/bash
  3.   3 ##test3
  4.   4 for i in `seq 1 10`;do
  5.   5 arry[$i]=`echo $RANDOM`
  6.   6 echo ${arry[$i]} >> /tmp/1.txt
  7.   7 done
  8.   8 a=`sort -n /tmp/1.txt |head -1`
  9.   9 b=`sort -n /tmp/1.txt | tail -1`
  10. 10 echo $a $b


0

定海偶然

赞同来自:

  • #!/bin/bash
  • ##
  • for i in `seq 1 10`
  • do
  •    ! id user$i &>/dev/null && useradd user$i && echo "user$i"|passwd --stdin user$i || echo "user$i is exist!"
  • done
0

hangtiangazi

赞同来自:

4
  1. #/bin/bash
  2. ##Test4
  3. filename=/etc/passwd
  4. user=(`awk -F: '{++user1[$NF]} END{for (i in user1) print i}' $filename`)
  5. format=(`awk -F: '{++user1[$NF]} END{for (i in user1) print i"_"user1[i]_"users"}' $filename`)
  6. length=${#user[*]}
  7. len=$[$length-1]
  8. for i in `seq 0 "$len"`do
  9. echo ${format[$i]}  `awk -F: '$NF~"'${user[$i]}'" {print $1}' $filename`
  10. done


0

hangtiangazi

赞同来自:


参考五期肖强写的。。。
0

Armani

赞同来自:

case  $1  in
  add)
  for i  in  `seq  0  10`
   do
     aa=`cat /etc/passwd  | awk -F:  '{print $1}' | grep "user"$i""`
     if [ -z  "$aa" ];then
      useradd -M user"$i" && echo " user"$i"" |  passwd --stdin  user"$i"
     fi
   done
;;
  del)
   for i  in  `seq  0  10`
    do
    aa=`cat /etc/passwd  | awk -F:  '{print $1}' | grep "user"$i""`
    if [ -n  "$aa" ];then
    userdel  user"$i"
    fi
    done
;;
  *)
    "Wrong!"
;;
esac
0

Armani

赞同来自:

#!/bin/bash
#计算 100以内  能被3整除的数的和
declare -i aa=3
declare -i sum=0

while [ $aa  -lt  100 ]
do
  sum=$[$aa+$sum]
  aa=$[$aa+3]
  echo $aa
done
  echo $sum
0

Armani

赞同来自:

#!/bin/bash
#随机生成10个数,挑选出最大的和最小的
declare -i max=0
declare -i min=100000

for i in  `seq 1  10`
do
   a[$i]=$RANDOM

    if [  ${a[$i]}  -gt $max ];then
      max=${a[$i]}

    fi

    if  [  ${a[$i]}  -lt $min ];then
      min=${a[$i]}
    fi
done
    echo "最大是"$max"."
    echo "最小是"$min"."
0

zyos

赞同来自:

只看了题目  没看学长的答案, 发现我写漏了。

  1. #! /bin/bash
  2. # write by zhangyong
  3. # 2015-12-03
  4. #auto add or del user
  5. echo "----------------------------------------------"
  6. echo "add: adduser"
  7. echo "del: deluser"

  8. read -t 30 -p "please input 'add' or 'del': " a

  9. case $a in

  10. add) for i in `seq 1 10`
  11.              do
  12.         useradd user$i
  13.         echo "user$i" |passwd --stdin user$i
  14.              done
  15. ;;
  16. del) for i in `seq 1 10`
  17.          do
  18.   userdel -r user$i
  19.          done
  20. ;;
  21. *) echo "you input is erro ,please input again"
  22. ;;
  23. esac
0

zyos

赞同来自:


  1. #! /bin/bash
  2. i=1
  3. sum=0
  4. while [ $i -lt 100 ]
  5.   do
  6.          b=$[$i%3]
  7.     if [ $b -eq 0 ]
  8.     then
  9.    sum=$[ $sum+$i ]
  10.     fi
  11. i=$(($i+1))

  12.   done
  13. echo $sum
0

hlymlv

赞同来自:

本帖最后由 hlymlv 于 2016-1-11 22:07 编辑

4.awk -F ':' '{print $NF}'  /etc/passwd|sort|uniq -c|sed -r 's/(.*[0-9])()(.*$)/\3\2\1/g'|sed 's/^.*$/& users/g'
还差一点,可以打印出匹配的用户然后用sed 插入到后面去
0

hlymlv

赞同来自:

出来了  有一点小缺陷
#!/bin/bash
m=`awk -F ':' '$NF=="/bin/bash" {print $1}' /etc/passwd|tr '\n' ' '`
n=`awk -F ':' '$NF=="/sbin/nologin" {print $1}' /etc/passwd|tr '\n' ' '`
a=`awk -F ':' '$NF=="/bin/sync" {print $1}' /etc/passwd|tr '\n' ' '`
b=`awk -F ':' '$NF=="/sbin/shutdown" {print $1}' /etc/passwd|tr '\n' ' '`
awk -F ':' '{print $NF}' file|sort|uniq -c|sed -r 's/(.*[0-9])()(.*$)/\3\2\1/g'|sed -n '1'p|sed 's/^.*$/& users '"$m"'/g'
awk -F ':' '{print $NF}' file|sort|uniq -c|sed -r 's/(.*[0-9])()(.*$)/\3\2\1/g'|sed -n '2'p|sed 's/^.*$/& users '"$a"'/g'
awk -F ':' '{print $NF}' file|sort|uniq -c|sed -r 's/(.*[0-9])()(.*$)/\3\2\1/g'|sed -n '3'p|sed 's/^.*$/& users '"$b"'/g'
awk -F ':' '{print $NF}' file|sort|uniq -c|sed -r 's/(.*[0-9])()(.*$)/\3\2\1/g'|sed -n '4'p|sed 's/^.*$/& users '"$n"'/g'

[root@lazy ~]# sh 1.sh
/bin/bash      3 users root smbuser hlymlv
/bin/sync      1 users sync
/sbin/halt      1 users shutdown
/sbin/nologin     30 users bin daemon adm lp mail uucp operator games gopher ftp nobody dbus vcsa abrt haldaemon ntp saslauth postfix sshd tcpdump nscd mysql named victor mysql-proxy user1 user2 user3 mailnull smmsp

0

zql254

赞同来自:

  1. #!/bin/bash
  2. #20160112 by kenney

  3. for i in `seq 0 9`;do
  4.     a[$i]=$[$RANDOM%100+1]
  5. done
  6. b=${a[0]}
  7. c=${a[0]}
  8. for n in ${a[@]};do
  9. if [ $n -lt $b ];then
  10.     b=$n
  11. elif [ $n -gt $c ];then
  12.     c=$n
  13. fi
  14. done
  15. echo "10个随机数为: ${a[@]}"
  16. echo "最小的数为 $b"
  17. echo "最大的数为 $c"
0

loveyouhyf

赞同来自:

#!/bin/bash
##分别统计,不同shell 各有多少用户,并分别列出用户,passwd.txt为/etc/passwd的复本
##write by 2016-01-13
a=`cat passwd.txt|awk -F ':' '{print $7}'|sort|uniq -c|sort -n|awk '{print $2}'`
for i in `echo $a`;do
n=`grep $i passwd.txt|wc -l`
m=`grep $i passwd.txt|awk -F ':' '{print $1}'`
echo $i"的数量为:"$n,"用户分别为:"$m
done
0

迷城

赞同来自:

都好厉害
0

rolay8

赞同来自:

本帖最后由 rolay8 于 2016-1-15 23:35 编辑
  1. 1

  2. #!/bin/bash

  3. case $1 in
  4.         add )
  5.                 for i in `seq 1 10`; do
  6.                 grep -w user$i /etc/passwd
  7.                 if [ $? -ne 0 ]; then
  8.                 useradd user$i|passwd --stdin "user$i" &>/dev/null
  9.                 fi
  10.                 done
  11.                 ;;
  12.         del )
  13.                 for i in `seq 1 10`; do
  14.                         userdel -rf user$i &>/dev/null
  15.                         echo "Account del success!"
  16.                 done
  17.                 ;;
  18.         * )

  19.                 echo "Usage: {del|add}"
  20.                ;;
  21. esac
0

rolay8

赞同来自:


  1. #!/bin/bash

  2. x=0
  3. for i in `seq 1 100`; do
  4.     spare=$(($i%3))
  5.     if [ $spare -eq 0 ]; then
  6.     x=$(($i+$x))
  7.     fi
  8. done

  9. echo "sum is $x"
0

rolay8

赞同来自:


  1. #!/bin/bash

  2. for i in `seq 0 9`; do
  3.     array[$i]=$RANDOM
  4. done

  5. echo -n ${array[@]}|sed 's/ /\n/g'|sort -rn|sed -n '1p;$p'
0

rolay8

赞同来自:


  1. #!/bin/bash

  2. user=`awk -F ":" '{print $NF}' /etc/passwd|sort|uniq`

  3. for i in $user; do
  4.     num=`grep -o $i /etc/passwd|uniq -c|awk '{print $1}'`
  5.     users=`grep $i /etc/passwd|awk -F ":" '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'`
  6.     echo "$i :${num}users  $users"
  7. done

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: