Linux入门(四)

1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来。
 
~]# grep -v "/sbin/nologin" /etc/passwd  | cut -d: -f1
root
sync
shutdown
halt
mageia
slackware
 
~]# grep -v "/sbin/nologin" /etc/passwd  |  wc -l
6
awk方法:


~]# cat /etc/passwd| awk -F: ‘{if($NF != "/sbin/nologin"){print $1;i++}}END{print "Total: "i}‘
root
sync
shutdown
halt
mageia
slackware
Total: 6
解释:假如最后一个字段不等于“/sbin/nologin”,就打印第一个字段,然后变量 i=i+1。最后显示变量 i 的数值。
-F:以“:”为分隔符。
NF:number of field,字段数量。$NF即表示最后一个字段。
END{}:仅在文本处理完成之后执行一次;



2、查出用户UID最大值的用户名、UID及shell类型

~]# cut -d: -f1,3,7 /etc/passwd| sort -nr -t: -k2 | head -1
slackware:2002:/bin/tcsh
cut:	  -d:以指定的字符为分隔符;	  -f:挑选出的字段;
sort:	  -n:基于数值大小而非字符进行排序;	  -t CHAR:指定分隔符;	  -k #:用于排序比较的字段;	  -r:逆序排序;
head:	  -#:查看文件的前n行;





3、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

~]# netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for(i in count){print i,count[i]}}‘ | sort -nr -k2
192.168.74.104 5
127.0.0.1 5
0.0.0.0 4
192.168.74.1 3

/regular expression/:仅处理能够被此处的模式匹配到的行;
split(s,a[,r]):以r为分隔符切割字符s,并将切割后的结果保存至a所表示的数组中;


4、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等 信息
[ ~]# cat createuser.sh
#!/bin/bash
#
[ $# -ne 1 ] && echo "Error" && exit 1
 
USERNAME=$1
 
if id $USERNAME &> /dev/null ;then
    echo "User $USERNAME already exists"
else
    echo "Add user: $USERNAME"
    useradd $USERNAME
    echo "Info: "
    id $USERNAME
fi
[ ~]# bash -n createuser.sh  #检测脚本中的语法错误
[ ~]# sh createuser.sh root
User root already exists
[ ~]# sh createuser.sh roottest
Add user: roottest
Info:
uid=2003(roottest) gid=2003(roottest) groups=2003(roottest)

5、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等

 
编辑用户目录下的.vimrc文件如下:

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == ‘sh‘
call setline(1,"#!/bin/bash")
call setline(2,"#")
call setline(3,"#*******************************************************************************")
call setline(4,"#Author Lam")
call setline(5,"#Date: ".strftime("%Y-%m-%d"))
call setline(6,"#Filename: ".expand("%"))
call setline(7,"#Copyright(C): ".strftime("%Y")." All rights reserved")
call setline(8,"#*******************************************************************************")
call setline(9,"")
endif
endfunc
autocmd BufNewFile * normal G