`
modabobo
  • 浏览: 511786 次
文章分类
社区版块
存档分类
最新评论

linux shell 统计passwd文件shell个数

 
阅读更多

在网上看到这个题目

大概意思就是:统计 /etc/passwd文件中有多少种shell及其个数


忙活了三个小时,自己写了个,代码如下:

#!/bin/sh

# get the shell number in the file /etc/passwd

declare -a arr_result

# print the array
print_arr(){
   sum=${#arr_result[*]}
   echo "total count is :$sum"
   for ((i=0;i<$sum;i++))
   do
        echo "array num:$i    ${arr_result[$i]}"
   done
}

while read line
do
    shell_name=`echo $line|awk -F":" '{print $7}'`
    count=${#arr_result[*]}
    #echo "number of arr: ----------------$count"
    if [ $count -eq 0 ];then
       arr_result[0]=`echo "$shell_name=1"`
    else    
       has=0
       for ((i=0;i<$count;i++))
       do
          sub=${arr_result[$i]}
          sh_name=`echo $sub|awk -F"=" ' {print $1}'` 
          sh_num=`echo $sub|awk -F"=" ' {print $2}'` 
          #echo "arr num is $i----"    
          #echo -e "suname=$sh_name"
          #echo -e "shnum=$sh_num"
          if [ "$sh_name" = "$shell_name" ];then
             new_num=`expr $sh_num + 1`
             #echo "arrhas and newnum=----------$new_num"
             arr_result[$i]=`echo $sh_name=$new_num`
             has=1
             break
          fi
       done
       if [ $has -eq 0 ];then
             #echo "arr do not has "
             arr_result[$count]=`echo $shell_name=1`
             has=0
       fi 
     fi
done < /etc/passwd

print_arr


结果如下:

写完后去看了下答案,悲摧了,答案只有一行代码,如下:

awk -F":" '{print $NF}'  /etc/passwd |uniq -c


结果如下:


悲摧过后,对比了下结果,发现答案里的方法不能完全表达题目的意思。当相同的shell被分割开时,统计结果被分开了。


想想自己三小时写的代码,几秒钟就ok了,太受打击了。




  


  
分享到:
评论

相关推荐

    Linux通过Shell脚本命令修改密码的两种方式

    交互方式修改密码 1. ssh 远程到主机; 2. 切换到root账号; [一般都是切换到root进行密码修改,... 3. passwd username 使用passwd username 修改 username 的密码; ...echo password | passwd testuser --stdin &gt; /dev

    linux/shell大作业

    在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本...

    LINUX/UNIX Shell编程大作业

    在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本...

    Linux shell 及常用命令介绍.txt Linux shell 及常用命令介绍.txt

    Linux shell 及常用命令介绍.txt 1、更改帐号密码 语法:passwd Old password: &lt;输入旧密码&gt; New password: &lt;输入新密码〉 Retype new password: &lt;再输入一次密码&gt; 2、联机帮助 语法: man 命令 例如: man ls 3、...

    LINUX与UNIX SHELL编程指南(很全)

    18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符 196 18.8 使用break和continue控制循环 197 18.8.1 break 197 ...

    Linux常见命令与shell脚本

    1.3 passwd修改口令 2 1.4 ls查看文件/目录 3 1.5 cd改变工作目录 4 1.6 pwd显示工作目录 4 1.7 mkdir创建目录 5 1.8 rmdir删除空目录 5 1.9 cp文件/目录拷贝 5 1.10 mv文件/目录改名、移动 6 1.11 rm文件/目录删除 ...

    linux shell 编程教程

    linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 ...

    Linux shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述...

    Linux 系统shell编程

    /etc/shells 该文件规定了我们系统可以使用哪些shell $echo $SHELL 该变量会告诉你当前正在使用的shell

    Linux与unix shell编程指南

    18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符 196 18.8 使用break和continue控制循环 197 18.8.1 break 197 ...

    linux下/etc/passwd文件的选项说明

    /etc/passwd 文件是系统的主要文件之一。该文件中包含了所有用户登录名清单;为所有用户指定了主目录;在登录时使用的 shell 程序名称等。该文件还保存了用户口令;给每个用户提供系统识别号。

    绝版经典《Linux与UNIX Shell编程指南》

    18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符 196 18.8 使用break和continue控制循环 197 18.8.1 break 197 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述...

    期末作业非得十个字句号

    在 Linux系统的/etc目录下有这样一个文件 passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的 shell请设计一个脚本( ...

    linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符...

    LINUX 与 UNIX SHELL编程指南

    18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while 循环和文件描述符 196 18.8 使用 break 和 continue 控制循环 197 18.8.1 ...

    LINUX与UNIX SHELL编程指南

    18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符 196 18.8 使用break和continue控制循环 197 18.8.1 break 197 ...

Global site tag (gtag.js) - Google Analytics