2024年7月26日(shell脚本 sed awk)

一、shell基础
1、shell 概念

shell英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是
操作系统的外壳。可以通过shell命令来操作和控制操作系统,比如
Linux中的shell命令就包括Is、cd、pwd等等。

 shell 在内核的基础上编写的一个应用程序,它连接了用户和Linux内
核,从而让用户能够更加便捷、高效、安全的使用linux内核,这其实
就是shell的本质。
使用专业术语的说法来解释,Shell其实是一个命令解释器,它通过接
受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进
行控制。

2、shell脚本

shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻
辑,脚本不用编译即可运行,它从一定程度上减轻了工作量,提高了工作效率,还可以批
量、定时处理主机,方便管理员进行设置或者管理。

3、shell脚本编写注意事项

shell命名:shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾

不能使用特殊符号、空格

名称要写的一眼可以看出功能,也就是顾名思义

 shell脚本首行需要#!/bin/bash开头

 shell脚本变量不能以数字、特殊符号开头,可以使用下划线_,但不能用破折号

二、shell脚本的构成

 脚本声明

 注释信息

 可执行语句

三、编辑脚本
1、脚本一

[root@git ~]# vim helloworld.sh

#!/bin/bash

echo "hello world"

ls -lh /etc/

2、两种执行方式

[root@git ~]# bash helloworld.sh

[root@git ~]# chmod +x helloworld.sh 

3、安装nginx脚本

[root@git ~]# vim install_nginx.sh 

# 逻辑顺序:先安装依赖关系,再进入到系统默认的安装包目录src,使用wget命令到网上下载nginx-1.8.0阪本的安装包,然后解压,再移动到nginx 安装目录,执行编译安装并配置,编译,编译安装)

[root@git ~]# bash install_nginx.sh

四、变量
1、自定义变量

变量名=值中,等于号=之前和之后不能有空格,比如:name = yang,这样是错的
name=yang 才对

变量名=值中,值内如果输入数学算式,是没办法算出结果的,只会输出字符串。

2、环境变量

由系统维护,用于设置工作环境

- $PWD       当前所在目录

. $SHELL    那一套系统

· $USER       当前用户

 [root@git ~]# env   查看所有的环境变量

3、位置变量

位置变量有0,n,n为1~9之间的数字

■ $0:第一个字段表示命令名或脚本名称

■ $1:脚本要处理的第一个参数

■ $2:脚本要处理的第二个参数

[root@git ~]# vim test001.sh


[root@git ~]# bash test001.sh 1 2 3 4 5
1
2
3
4

[root@git ~]# vim create.sh

[root@git ~]# bash create.sh a a
更改用户 a 的密码 。
passwd:所有的身份验证令牌已经成功更新。

4、预定义变量

Bash中内置的一类变量,不能直接修改

预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创
建新的预定义变量,也不能直接为预定义变量赋值。

$ *: 将所有参数作为整体

$@:单个数的组合,每个参数占一行
$0:保存了脚本名称

$ ?: 保存命令或脚本的执行状态码

$#:保存脚本要处理的参数的个数

[root@git ~]# vim new.sh    *一行显示


[root@git ~]# bash new.sh 1 2 a
1 2 a

[root@git ~]# vim new.sh  @一列显示


[root@git ~]# bash new.sh 1 2 a
1
2
a

5、变量的定义与输出

(1)定义一个新的变量

格式:变量名=变量值
注意:变量名必须以字母或下划线开头,严格区分大小写

(2)变量符号运用

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号:或$():命令替换,提取命令的执行结果

(3)输入和输出

输入格式:read [-p "显示的提示信息"] 变量名 输出格式:echo $变量名

[root@git ~]# vim new.sh


[root@git ~]# bash new.sh 1 2 a
1
2
a
0
3
new.sh

ping 测试脚本

[root@git ~]# vim network.sh


[root@git ~]# bash network.sh 
 请输入网址www.baidu.com

[root@git ~]# vim network.sh


[root@git ~]# bash network.sh 
 请输入网址www.baidu.com
0

[root@git ~]# vim network.sh


[root@git ~]# bash network.sh 
 请输入网址www.baidu.com
网络畅通
0

四、字符串判断

1、格式

■[字符串1==字符串2] 字符串内容相同

■[字符串1 != 字符串2] 字符串内容不同

■[-z字符串]  字符串内容为空

■[-n 字符串]   字符串内容不为空

[root@git ~]# aaa="abc"
[root@git ~]# echo $aaa 
abc
[root@git ~]# test $aaa == "abc"
[root@git ~]# echo $?
0
[root@git ~]# test $aaa == "aaaa"
[root@git ~]# echo $?
1
[root@git ~]# test $aaa == "aaa"
[root@git ~]# echo $?
1

[root@git ~]# unset aaa
[root@git ~]# echo $aaa

五、if条件判断

1、if 单分支语句

if 条件判断; then

        条件成⽴执⾏的命令(可以有多个命令,命令执行方式为逐行执行要么全执行,要么全不执行)

fi

[root@localhost test]# vim if.sh

#!/bin/bash

num1=3 # 给定变量

num1 num2=3 # 给定变量

num2 if [ $num1 -eq $num2 ];then      # 判断num1变量是否等于num2

echo "$num1 equal $num2"      # 如果等于,那么执行命令,echo输出

echo "in if"

fi

[root@localhost test]# sh ./if.sh

3 equal 3

in if

 2、if多条件判断

if 条件判断; then

条件成⽴执⾏的命令(可以有多个命令)

else

条件不成⽴执⾏的命令(可以有多个命令)

fi

[root@git ~]# vim menu.sh


[root@git ~]# bash menu.sh 

 3、多重判断语法 elif

if 条件1; then

        #命令,条件1成⽴执⾏

elif 条件2;then

        #命令,条件1不成⽴,条件2成⽴执⾏

elif 条件3;then

        #命令,条件1不成⽴,条件2不成⽴,条件3成⽴执⾏

else

        #命令 ,以上条件都不成⽴执⾏

fi

[root@git ~]# vim test.sh


[root@git ~]# bash test.sh
请输?您的分数(0-100):20
20分,不及格!
 

六、与或判断

判断多个条件

多个条件其中一个成立,或

多个条件都要成立,与

或运算判断:|| 或,两个条件满足其一即可,还有-o

与运算判断:&& 与,两个条件都得满足才行,还有-a 

七、shell脚本读取用户输入和计算
1、shell读取用户输入 
1. read命令

read:用来从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从键盘
读取用户输下的数据;如果进行了重定向,那么可以从文件中读取数据。

(1) 格式

read[-选项][变量赋值]

(2)选项

变量赋值:可以有一个,也可以有多个

-p: 显示提示信息

-s:静默模式,不会在屏幕上显示输入的字符。可用于输入密码或其他需要保密的信息

(3)read 可以同时给多个变量赋值

[root@git ~]# read -p "三个变量" a b c
三个变量1 2 3
[root@git ~]# echo $a
1
[root@git ~]# echo $b
2
[root@git ~]# echo $c
3

(4)注册账户脚本

[root@git ~]# vim register.sh


[root@git ~]# bash register.sh 
username:abc
passwd:abc
更改用户 abc 的密码 。
passwd:所有的身份验证令牌已经成功更新。
账户abc注册成功
[root@git ~]# su abc
[abc@git root]$ su
密码:

八、循环语法
1、for循环
(1)作用

 读取不同的变量值,以逐个执行同一组命令

(2)结构

for 变量名 in 取值列表(范围)

do

        命令序列

done

取值列表:数字范围、字符串、多个字符串、提前设定好的变量等

for默认以所有的空白字符进行分隔:tab、空格、回车,去循环处理

分隔成几段就循环几次

(3)案例 

[root@git ~]# mkdir /abc
[root@git ~]# nohup inotifywait -mr /abc/
[root@git ~]# vim wait.sh


[root@git ~]# bash wait.sh 

[root@git ~]# vim loop.sh


[root@git ~]# bash loop.sh 我是
我是

[root@git ~]# vim city.sh


[root@git ~]# bash city.sh 
青岛是个好地方
庆阳是个好地方

九、sed

sed 是文本处理工具,读取文本内容,根据指定条件进行处理,可实现 增删改查的功能。sed 依赖于正则表达式。

1、格式

sed '过滤+动作' 文件路径

2、选项

-e 指定要执行的命令 (操作) ,只有一个编辑命令 (操作) 时可省略

-n 只输出处理后的行,读入时不显示,不对原文件进行修改

-i 直接修改源文件,不输出结果

 1.配置一个自动设置静态ip以及关闭selinux服务 关闭防火墙服务 关闭NetWOrkManager,修改
主机名称的脚本,ip和主机名称使用read输入

 [root@git ~]# vim initserver.sh

 #!/bin/bash
# 备份
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.bak
read -p "请输入IP地址"
# 替换DHCP为 none
sed -i '/dhcp/s/dhcp/none/g' /etc/sysconfig/network-scripts/ifcfg-ens33
# 在文档最后添加5行
# IPADDR
sed -i '$aIPADDR='"$ip"'' /etc/sysconfig/network-scripts/ifcfg-ens33
# NETMAST
sed -i '$aNETMASK=255.255.255.0' /etc/sysconfig/network-scripts/ifcfg-ens33
# GATEWAY
sed -i '$aGATEWAY=192.168.8.2' /etc/sysconfig/network-scripts/ifcfg-ens33
# DNS1
sed -i '$aDNS1=8.8.8.8' /etc/sysconfig/network-scripts/ifcfg-ens33
# DNS2
sed -i '$aDNS2=114.114.114.114' /etc/sysconfig/network-scripts/ifcfg-ens33
#修改uuid
sed -i '/UUID/cUUID='"$(uuidgen)"'' /etc/sysconfig/network-scripts/ifcfg-ens33
#修改主机名称
read -p "请输入主机名称" hn
hostnamectl set-hostname $hn
#停用selinux
setenforce 0
sed -p '/SELINUX=enforcing/c/SELINUX=disabled' /etc/selinux/config
#停用防火墙
systemctl stop firewalld
systemctl disable firewalld
#停用NetworkManager

systemctl stop NetworkManager
systemctl disable NetworkManager

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值