在网上看到这个题目
大概意思就是:统计 /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
结果如下:
![](http://my.csdn.net/uploads/201205/05/1336215897_1398.PNG)
写完后去看了下答案,悲摧了,答案只有一行代码,如下:
awk -F":" '{print $NF}' /etc/passwd |uniq -c
结果如下:
悲摧过后,对比了下结果,发现答案里的方法不能完全表达题目的意思。当相同的shell被分割开时,统计结果被分开了。
想想自己三小时写的代码,几秒钟就ok了,太受打击了。
分享到:
相关推荐
交互方式修改密码 1. ssh 远程到主机; 2. 切换到root账号; [一般都是切换到root进行密码修改,... 3. passwd username 使用passwd username 修改 username 的密码; ...echo password | passwd testuser --stdin > /dev
在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本...
在Linux系统的/etc目录下有这样一个文件passwd,该文件里包含系统中所有用户信息的记录,记录里包含每个用户的如下信息:用户名、密码、用户ID、组ID、用户全名、用户主目录和用户登录所用的shell。请设计一个脚本...
Linux shell 及常用命令介绍.txt 1、更改帐号密码 语法:passwd Old password: <输入旧密码> New password: <输入新密码〉 Retype new password: <再输入一次密码> 2、联机帮助 语法: man 命令 例如: man ls 3、...
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 ...
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文件/目录删除 ...
本资源提供了 100 个 Linux Shell 脚本经典案例解析,涵盖了从基本的 Hello World 到复杂的系统管理和监控的脚本。这些脚本可以帮助用户快速掌握 Linux Shell 编程的基本技能和高级技术。 1. Hello World 脚本 这...
通过学习和实践这些内容,我对 Linux 文件操作、设备文件、终端设备和 shell 编程的基础知识有了更深入的了解和掌握。这些知识和技能对于在 Linux 系统上进行开发、管理和维护工作都是非常有用的。
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 脚本编程技术的变量定义、变量使用、循环控制结构、条件选择结构、用户交互、文件读写、文本内容分析以及 Linux 重要命令的使用等,以验证学生对于 shell 脚本编程的掌握...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述...
/etc/shells 该文件规定了我们系统可以使用哪些shell $echo $SHELL 该变量会告诉你当前正在使用的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 ...
/etc/passwd 文件是系统的主要文件之一。该文件中包含了所有用户登录名清单;为所有用户指定了主目录;在登录时使用的 shell 程序名称等。该文件还保存了用户口令;给每个用户提供系统识别号。
LINUX课程设计-shell编程 ...本资源摘要信息总结了LINUX课程设计-shell编程的主要知识点和要求,涵盖了Linux操作系统、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 ...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述符...
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还...18.7.6 扫描文件行来进行数目统计 191 18.7.7 每次读一对记录 193 18.7.8 忽略#字符 193 18.7.9 处理格式化报表 194 18.7.10 while循环和文件描述...