第五周作业
1、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
在家目录下创建.vimrc文件
root@test1 ~]# cat > /root/.vimrc <<EOF
set ignorecase
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,"#Author: bridge")
call setline(4,"#QQ: 3285310239")
call setline(5,"#Date: ".strftime("%Y-%m-%d"))
call setline(6,"#FileName: ".expand("%"))
call setline(7,"#Version: v1.0")
call setline(8,"#Description: ")
call setline(9,"#********************************************************************")
call setline(10,"")
endif
endfunc
autocmd BufNewFile * normal G
EOF
cat:合并文件或查看文件内容
命令详解
cat命令可以理解为英文单词concatenate的缩写,其功能是连接多个文件并且打印到屏幕输出,或者重定向到指定的文件中。此命令常用来显示单个文件内容,或者讲几个文件内容连接起来一起显示,还可以从标准输入中读取内容并显示,生产环境中它常与重定向或追加符号配合使用。
cat命令5大常用功能
| cat命令常用功能 | 简要例子说明 |
|---|---|
| 查看文件内容 | 例如:cat file.txt,这是cat最基本的功能之一 |
| 把多个文件合并成一个 | 例如:cat file1.txt file2.txt >newfile.txt |
| 创建编辑新文件 | 例如:输入cat >file.txt,后面接要编辑的内容,使用快捷键Ctrl+d或Ctrl+c可结束编辑,此功能应用不多 |
| 非交互式的编辑或追加内容到文件尾部 | 这是生产工作中最重要的一个应用,所以必须要熟练掌握 |
| 清空文件内容 | 例如:使用cat /dev/null >file.txt命令就可以把文件内容清空,但是文件还是存在的 |
语法格式
cat [option] [file]
cat 【选项】 【文件】
cat命令的参数选项及说明
| 参数选项 | 解释说明 |
|---|---|
| -n | 从1开始对所有输出的内容按行编号 |
| -b | 和-n选项功能类似,但会忽略显示空白行行号 |
| -s | 当遇到有连续两行以上的空白行时,就替换为一行空白行 |
| -E | 在每一行的行尾显示$符号 |
非交互式编辑多行文件
[root@test1 data]# cat >>cat_test.txt <<EOF
I am bridge.
I come from China.
My QQ is 3285310239.
EOF
[root@test1 data]# cat cat_test.txt
I am bridge.
I come from China.
My QQ is 3285310239.
使用-n参数显示行号
[root@test1 data]# cat -n cat_test.txt
1 I am bridge.
2
3 I come from China.
4
5
6 My QQ is 3285310239.
使用-b参数显示行号但忽略空白行行号
[root@test1 data]# cat -b cat_test.txt
1 I am bridge.
2 I come from China.
3 My QQ is 3285310239.
使用-s参数将连续的两行以上的空白行替换为一行空白行
[root@test1 data]# cat -s cat_test.txt
I am bridge.
I come from China.
My QQ is 3285310239.
使用-E参数在每一行的行尾显示$符号
[root@test1 data]# cat -E cat_test.txt
I am bridge.$
$
I come from China.$
$
$
My QQ is 3285310239.$
2、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来
[root@test1 shell]# grep -v '/sbin/nologin' /etc/passwd|wc -l
57
[root@test1 shell]# grep -v '/sbin/nologin' /etc/passwd|cut -d : -f 1
root
sync
shutdown
halt
tom
system1
system2
system3
system4
system5
system6
system7
system8
system9
system10
system11
system12
system13
system14
system15
system16
system17
system18
system19
system20
system21
system22
system23
system24
system25
system26
system27
system28
system29
system30
system31
system32
system33
system34
system35
system36
system37
system38
system39
system40
system41
system42
system43
system44
system45
system46
system47
system48
system49
system50
mageia
slackware
cut:从文本中提取一段文字并输出
命令详解
功能说明
cut命令从文件的每一行剪切字节、字符或字段,并将这些字节、字符或字段输出至标准输出。
语法格式
cut [option] [file]
cut 【选项】 【文件】
参数选项说明
| 参数选项 | 解释说明 |
|---|---|
| -c | 以字符为单位进行分割 |
| -d | 自定义分隔符,默认以tab为分隔符 |
| -f | 与选项-d一起使用,指定显示哪个区域 |
| N | 第N个字节、字符或字段 |
| N- | 从第N个字节、字符或字段开始直至行尾 |
| N-M | 从第N到第M(含第M)个字节、字符或字段 |
| -M | 从第1到第M(含第M)个字节、字符或字段 |
使用范例
测试文件
[root@test1 data]# cat cut_test.txt
My name is bridge
My QQ is 3285310239
Today is 2019-11-03
以字符为分隔符,取第4-5个字符,取4-5和第15个字符
[root@test1 data]# cut -c 4-5 cut_test.txt
na
QQ
ay
[root@test1 data]# cut -c 4-5,15 cut_test.txt
nad
QQ1
ay1
以" "为分隔符,取第二个字段,取2到3个字段
[root@test1 data]# cut -d " " -f 2 cut_test.txt
name
QQ
is
[root@test1 data]# cut -d " " -f 2-3 cut_test.txt
name is
QQ is
is 2019-11-03
3、查出用户UID最大值的用户名、UID及shell类型
[root@test1 shell]# sort -n -t ":" -k3 /etc/passwd|tail -1
system50:x:5051:5051::/data/50:/bin/bash
sort:文本排序
命令详解
功能说明
sort命令将输入的文件内容按照指定的规则进行排序,然后将排序结果输出。
语法格式
sort [option] [file]
sort 【选项】 【文件】
sort命令的参数选项及说明
| 参数选项 | 解释说明 |
|---|---|
| -b | 忽略每行开头存在的空格字符 |
| -r | 倒序排列 |
| -u | 去除重复行 |
| -t | 指定分隔符 |
| -k | 按指定区间排序 |
| -n | 依照数值的大小进行排序 |
使用范例
测试文件
[root@test1 data]# cat sort_test.txt
ydeg:11562
fzuf:7001
zwqv:11561
hgkj:45945
xhqy:1371
ojij:321723
zzap:7001
fhdf:7006
hgkj:9245
zzap:26883
默认以行为单位进行比较
默认比较的原则是从首字符向后,依次按ASCⅡ码值进行比较,输出默认按升序进行排列。
[root@test1 data]# sort sort_test.txt
fhdf:7006
fzuf:7001
hgkj:45945
hgkj:9245
ojij:321723
xhqy:1371
ydeg:11562
zwqv:11561
zzap:26883
zzap:7001
通过-r参数使输出降序排列
[root@test1 data]# sort -r sort_test.txt
[root@test1 data]# sort -r sort_test.txt
zzap:7001
zzap:26883
zwqv:11561
ydeg:11562
xhqy:1371
ojij:321723
hgkj:9245
hgkj:45945
fzuf:7001
fhdf:7006
通过-u参数去除重复行
[root@test1 data]# sort -u sort_test.txt
fhdf:7006
fzuf:7001
hgkj:45945
hgkj:9245
ojij:321723
xhqy:1371
ydeg:11562
zwqv:11561
zzap:26883
zzap:7001
通过-t、-k参数按照指定列排序
指定“:”为分隔符,按照第二列排序
[root@test1 data]# sort -t ":" -k2 sort_test.txt
zwqv:11561
ydeg:11562
xhqy:1371
zzap:26883
ojij:321723
hgkj:45945
fzuf:7001
zzap:7001
fhdf:7006
hgkj:9245
指定“:”为分隔符,按照第二列1到3个字符排序,再按照默认顺序排序
[root@test1 data]# sort -t ":" -k2.1,2.3 sort_test.txt
ydeg:11562
zwqv:11561
xhqy:1371
zzap:26883
ojij:321723
hgkj:45945
fhdf:7006
fzuf:7001
zzap:7001
hgkj:9245
指定“:”为分隔符,先按照第二列第一个字符排序,再按照第一列第二个字符排序
[root@test1 data]# sort -t: -k2.1,2.1 -k1.2,1.2 sort_test.txt
ydeg:11562
xhqy:1371
zwqv:11561
zzap:26883
ojij:321723
hgkj:45945
fhdf:7006
fzuf:7001
zzap:7001
hgkj:9245
命令参数说明
- -t ":":按“:”作为分隔域。
- -k2.1,2.3:按第二个字段第一个字符开始到第二个字段第三个字符结束排序。
通过-n参数按照数值的大小进行排序
[root@test1 data]# sort -t ":" -k2 -n sort_test.txt
xhqy:1371
fzuf:7001
zzap:7001
fhdf:7006
hgkj:9245
zwqv:11561
ydeg:11562
zzap:26883
hgkj:45945
ojij:321723
4、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序
查看当前连接本机的远程主机信息
[root@test1 ~]# w
16:54:14 up 56 min, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.1.1 15:58 6.00s 0.09s 0.00s w
root pts/1 172.16.1.1 16:38 15:10 0.00s 0.00s -bash
root pts/2 172.16.1.22 16:50 3:37 0.01s 0.01s -bash
[root@test1 ~]# w -h
root pts/0 172.16.1.1 15:58 5.00s 0.08s 0.00s w -h
root pts/1 172.16.1.1 16:38 12:37 0.00s 0.00s -bash
root pts/2 172.16.1.22 16:50 1:04 0.01s 0.01s -bash
统计当前连接本机的每个远程主机IP的连接数并按从大到小排序
[root@test1 ~]# w -h|wc -l
3
[root@test1 ~]# w -h|sort -r -k3
root pts/2 172.16.1.22 16:50 2:43 0.01s 0.01s -bash
root pts/1 172.16.1.1 16:38 14:16 0.00s 0.00s -bash
root pts/0 172.16.1.1 15:58 0.00s 0.08s 0.00s w -h
w:显示已登录用户信息
命令详解
功能说明
w命令可以显示已经登录系统的用户,并显示用户正在执行的命令。
语法格式
w [option] [user]
w 【选项】 【用户】
参数选项说明
| 参数选项 | 解释说明 |
|---|---|
| -h | 不显示前两行标题信息 |
使用范例
不使用参数时
[root@test1 data]# w
13:08:54 up 1:50, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.1.1 11:20 1:14m 0.06s 0.06s -bash
root pts/1 172.16.1.1 11:49 6.00s 0.08s 0.00s w
解释说明
- USER:表示登录系统的用户。
- TTY:表示用户使用的TTY名称。
- FROM:表示用户从哪里登录进来的,一般显示远程登录主机的IP地址或主机名。
- LOGIN@:用户登录的日期和时间。
- IDLE:显示终端的空闲时间。
- JCPU:表示该终端上的所有进程及子进程使用系统的总时间。
- PCPU:当前活动进程使用的系统时间。
- WHAT:当前用户执行的进程名称和选项。
使用-h参数不显示前两行标题信息
[root@test1 data]# w -h
root pts/0 172.16.1.1 11:20 1:15m 0.06s 0.06s -bash
root pts/1 172.16.1.1 11:49 6.00s 0.08s 0.00s w -h
5、编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果 指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等 信息
[root@test1 shell]# vim createuser.sh
#!/bin/bash
#********************************************************************
#Author: bridge
#QQ: 3285310239
#Date: 2019-11-02
#FileName: /shell/createuser.sh
#Version: v1.0
#Description:
#********************************************************************
read -p "Please input an username:" -t 30 UserName
UserCount=`cut -d ":" -f1 /etc/passwd|grep -w "$UserName"|wc -l`
if [[ "$UserCount" -eq 0 ]];then
useradd $UserName >>/dev/null 2>&1
echo "Creating user $UserName"
sleep 2
echo The user of "$UserName has been created"
echo -e The userinfo of $UserName is "\n"`id $UserName`
else
echo The user of "$UserName has been exist;"
echo -e The userinfo of $UserName is "\n"`id $UserName`
fi
[root@test1 shell]# chmod +x createuser.sh
[root@test1 shell]# /bin/bash createuser.sh
Please input an username:Luffy
Creating user Luffy
The user of Luffy has been created
The userinfo of Luffy is
uid=5054(Luffy) gid=5056(Luffy) groups=5056(Luffy)
[root@test1 shell]# /bin/bash createuser.sh
Please input an username:Luffy
The user of Luffy has been exist;
The userinfo of Luffy is
uid=5054(Luffy) gid=5056(Luffy) groups=5056(Luffy)
id:显示用户和用户组的信息
命令详解
功能说明
id命令能够显示指定用户真实有效的用户ID(UID)和组ID(GID)等信息。
语法格式
id [option] [username]
id 【选项】 【用户名】
id命令的参数选项及说明
| 参数选项 | 解释说明 |
|---|---|
| -g | 显示用户组ID |
| -n | 显示用户,所属群组或附加群组的名称,不显示数字 |
| -r | 显示实际ID |
| -u | 显示用户ID |
使用范例
[root@test1 ~]# id #不接用户参数,默认是当前登录用户。
uid=0(root) gid=0(root) groups=0(root)
[root@test1 ~]# id luffy #指定显示luffy用户的信息。
uid=5053(luffy) gid=5055(luffy) groups=5055(luffy)
[root@test1 ~]# id -g luffy #显示用户组GID
5055
[root@test1 ~]# id -gn luffy #显示用户组的名称,而不是用户组的GID号
luffy
[root@test1 ~]# id -u luffy #显示用户ID
5053
[root@test1 ~]# id -un luffy #显示用户名称,而不是用户的UID号
luffy

浙公网安备 33010602011771号