linux系统中shell常用命令以及脚本练习


实验环境的搭建:设置一台ip为172.25.254.137的主机
vim /etc/sysconfig/network-scripts/ifcfg-ens3
DEVICE=ens3
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.25.254.137
PREFIX=24
NAME=ens3

实验素材:
rm -fr /mnt
echo westos linux > westos
cat westos > westos1
echo 123 >> westos1
cat westos cat westos1
生成两个内容不同的文件
mkdir westosdir mkdir westosdir1 touch westosdir1/file
生成两个内容不同的目录

一、diff、cat、sort命令的使用

1.diff命令

diff westos westos1 ##显示两个文件的不同
westos与westos1两个文件的不同diff -b 忽略文件中的空格不同
在这里插入图片描述
在这里插入图片描述-B 忽略文件中的空行不同
-i 忽略大小写的不同
在这里插入图片描述在这里插入图片描述-c 显示对比文件的所有内容,并标识不同内容
在这里插入图片描述-r 对比目录间的不同
在这里插入图片描述合并时,需要用到打补丁的工具:
diff -u westos westos1 > westos.path ##生成westos的补丁文件
在这里插入图片描述dnf install patch
patch westos westos.path ##将补丁文件打入
在这里插入图片描述在这里插入图片描述但是我们发现将补丁打入后,原文件被覆盖,为了保证数据的安全性,应该提前给原文件进行备份。
patch westos westos.path ##在打补丁的同时生成原文件的备份文件,后缀为.orig
在这里插入图片描述

2.cut命令

cut -d : -f 1 passwd ####显示文件内容的第一列,-d表示指定分隔符号,-f指定行数
在这里插入图片描述cut -c 1 passwd ##显示文件的第一列的第一个字符,-c指字符
在这里插入图片描述

4.sort命令

实验素材:在这里插入图片描述sort westos ##给westos排序,默认只排第一行
在这里插入图片描述sort -n westos ##纯数字排序
在这里插入图片描述sort -nr westos ##数字排序倒序
在这里插入图片描述就给大家演示到这里,其他的大家可以自己尝试:
sort -nru westos ##忽略重复行
sort -nru westos -o test ##输出到指定文件
sort -n westos | uniq -c ##合并重复内容,并统计重复次数
sort -n westos | uniq -d ##显示重复的行
sort -n westos | uniq -u ##显示唯一的行
sort -t : -k 2 westos ##指定分隔符:根据二列排序

练习:
1 ifconfig 网卡 可以显示网卡信息
显示信息中包含此网卡使用的ip地址,用命令过滤此ip且输出时只显示ip不显示其
他信息
ifconfig |cut -d ’ ’ -f 10 |head -2
172.25.254.137
在这里插入图片描述2 找出能登录系统用户中UID最大的用户,并显示其名称
grep /bin/bash /etc/passwd | sort -t : -nrk 3 |head -1|cut -d : -f 1
westos
在这里插入图片描述

二、&&与||的使用

二者的含义:
&& ##命令成功执行&&之后的命令
|| ##命令失败执行||之后的命令

1.&&与||使用的演示

检测用户是否存在的脚本:

#! /bin/bash  ##设定脚本的运行环境
grep hellow /etc/passwd && 
echo hellow is exist
} || {
echo hellow is not exist
}

三、test、tr指令

1.tses指令

test指令===[空格 空格]
a=5 b=6

[ "$a" = "b"] && echo yes || echo no
      	 !=  ##不等于
      	-eq ##等于
        -ne ##不等于
        -lt ##小于
        -le ##小于等于
        -ge ##大于等于
        -gt ##大于
        -o  ##或者
        -a  ##并且

在这里插入图片描述这里给大家演示一下,其他的大家可以自己操作

2.tr指令

批量操作:
tr ‘a-z’ ‘A-Z’ < westos ##把westos文件中的小写字母转换成大写字母
单个操作:
tr ‘a’ ‘A’ < westos ##把westos文件中的小写字母a转换成大写字母A

脚本练习
1. 编写脚本nmm_check.sh,检测数字是否在0~9,或者大于等于10

#!/bin/bash
[ "$1" -ge "0" -a "$1" -lt "10" ] && {
echo $1 is in 0~9
} || {
echo $1 is not in 0~9
}
数字大于10,输出"$1" is not in 0~9
数字小于10且大于0,输出"$1" is in 0~9

**2.**检查文件是否存在,并判断文件的类型:

#!/bin/bash  
[ -z "$1" ] && {
        echo "未检测到文件,请指定"
        exit
} 

[ -e "$1" ] || { 							##-e,检测文件是否存在
        echo "Error:$1 is not exist !!"
        exit
}
                                                                        
[ -L "$1" ] && {							##-L,检测文件是否是一个链接
        echo "$1 is a link file"
        exit
}

[ -f "$1" ] && {							##-f,检测文件是否是一个普通文件
        echo "$1 is a common file"	
        exit
}

[ -d "$1" ] && {							##-d,检测是否是一个文件
        echo "$1 is a directory"
        exit
}

[ -S "$1" ] && {							##-S,检测是否是一个套接字
         echo "$1 is a socket"
         exit
}
[ -b "$1" ] && {							##-b,检测是否是一个块设备
        echo "$1 is a device file"
        exit
}

[ -c "$1" ] && {							##-c,检测是否是字符设备文件
        echo "$1 is a char"
        exit
}

四、字符过滤grep

实验素材:
cp /etc/passwd . ##复制/etc/passwd文件到当前环境下

1.grep的使用

grep root passwd ##显示含有关键字root的行
grep -i root passwd ##忽略搜索条件root大小写的行
grep -E “root|nologin” passwd ##显示含有root和nologin的行 ====grep -e root -e nologin passwd
grep -E “\<root” passwd ##显示root前面没有扩展字符的行
grep -E “root\<passwd ##显示root后面没有扩展字符的行
grep -E “\<root\<passwd ##显示root前后都没有拓展字符的行
grep -n root passwd ##显示搜索字符所在的行
grep -n 5 root passwd ##显示搜索字符所在行以及上下各5行
grep -B5 root passwd ##显示搜索关键字所在的行以及上5行
grep -A5 root passwd ##显示搜索关键字所在的行以及下5行
grep root passwd -v ##显示不含有关键字的行

2.grep字符数量匹配规则

^westos ##以westos开头
westos$ ##以westos结尾
w....s  ##w开头四个任意字符s结尾
*       ##字符出现任意##0到1次
+       ##1到任意次
{n}     ##n次
{m,n}   ##m到n次
{,n}    ##最多n次
{n,}    ##最少n次                                                       
(ab){2} ##ab字符出现两次

脚本练习:
显示系统中能被su命令切换的用户名称,vim sh.sh:
#!/bin/bash
grep -E “bash ∣ s h |sh sh” /etc/passwd | cut -d : -f 1
!!注意su命令可以切换的用户有bash和sh结尾的两种。
在这里插入图片描述

五、sed

1.sed的行内容处理

sed 参数 对象

s

ed 's/nologin/westos/g' passwd ##将文件中的nologin替换成westos
或者:
vim /etc/rule :s/nologin/westos/g
 sed -f /etc/rule passwd  ##将文件中的nologin替换成westos

p(显示):

sed 5p passwd ##打印passwd文件的第五行
sed -n 5p passwd ##只输出被处理行的内容
cat -b passwd | sed -n 3,5p  ##处理3到5行
cat -b passwd | sed -n ‘3p;5p’ ##处理第三行和第五行
sed -n ‘/^root/p’ passwd ##处理以root开头的
sed -n ‘/root$/p’ passwd ##处理以root结尾的

d(删除):

sed ‘5d’ passwd ##删除第五行
cat -b passwd | sed ‘5d’ ##删除第五行,并显示
cat -b passwd | sed ‘5,8d’ ##删除第五行到第八行,并显示
cat -b passwd | sed -e ‘5d;8d’ ##删除第五行和第八行
sed -e ‘/^root/d’ passwd ##删除root开头的
sed -e '/root$/d' passwd ##删除root结尾的
sed -e ‘$dpasswd ##删除最后一行

a(增加):

sed '2a666666' passwd ##将6666666添加到passwd的第二行后
sed '$a666666' passwd ##将6666666添加到passwd的最后一行

c(替换):

sed '1caaaaaa' passwd ##将passwd的第一行替换成aaaaaa
sed '/root/chahaha' passwd ##将文件中的root替换成hahaha

w(写入):

sed '/nologin$/westosgile' passwd ##将符合条件的行写入到指定文件

i(插入):

sed '2i6666' passwd ##将6666插入到passwd的第二行之前

r(整合文件):
文件lee:1223

sed  '2rlee' passwd ##将文件lee的内容整合到passwd的第二行后

2.sed的文件内容处理

sed '4,5s/root/lee/g' passwd ##将passwd文件的第四行到第五行中的root替换>为lee
sed 's/bin/westos/g' passwd ##将全文的bin替换为westos
sed 's/\//#####/g' passwd ##将原文中所有的/替换为#####===sed ‘s@\/@#####@g' passwd
sed '条件'  -i passwd ##将替换的条件写入到原文中

脚本练习:
vim Apache.sh
此脚本接入的数字,http的端口就改为这个数字。(假设selinux关闭)

#!/bin/bash
setenforce 0 &> /dev/null

[ -z "$1" ] && {
        echo "Error:Please input port following script !!"
        exit
}

rpm -q httpd &> /dev/null || {
        echo "Error:Apache is not installed !!"
        exit
}

systemctl status httpd | grep "running" &> /dev/null || { 
        echo "Error:Apache is not running !!"
        exit
}

netstat -antlupe | grep -E ":$1\>" &> /dev/null && {
        echo "Error:$1 is in used !!"
        exit
}

sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf 
systemctl restart httpd

netstat -antlupe | grep http
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值