Linux入门(四)
~]# 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所表示的数组中;
[ ~]# 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、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
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