4.2 Shell 基础知识

Shell脚本(shell script)就是将要执行的命令按顺序保存到一个文本文件,并给该文件可执行权限,方便一次性执行的一个程序文件。主要是方便管理员进行设置或管理,可结合各种shell控制语句以完成更复杂的操作。常用于重复性操作、批量事物处理、自动化运维、服务运行状态监控、定时任务执行等。

1、Shell 分隔符

“;”:无论前面命令是否执行成功,都执行后面的命令

date;who

“&&”:前面命令执行成功,在执行后面的命令。

abc&&who				# -bash: abc: command not found

who&&abc

“||": 前面命令执行失败, 再执行后面的命令

date||who						# Fri Dec  1 18:35:05 CST 2023

abc||who

2、Shell 脚本编写
a. 脚本格式
  • 创建shell脚本以.sh结尾
  • 第一行指定shell解释器,以#!开头,后面跟shell解释器绝对路径
  • 第二行写注释,注释以#开头,注释包括作者,时间以及脚本作用
  • 最后编写shell命令
  • 如果脚本比较复杂,请填写注释
b. nmap 命令
  • 描述:linux下的网络扫描和嗅探工具
  • 语法:nmap [选项] 目标ip/网段13

-sT:TCP连接扫描,不安全,慢

-sS:SYN扫描,使用最频繁,安全,快

-Pn:目标机禁用ping,绕过ping扫描

-sU:UDP扫描,慢,可得到有价值的服务器程序

-sA:检测哪些端口被屏蔽

-p:对指定端口扫描

-sP:主机存活性扫描,arp直连方式

-f:使用小数据包发送,避免被识别出

# 安装 nmap
yum install -y nmap

# 快速检测目标主机开放端口
nmap -sS 192.168.137.252

编写端口扫描脚本:vim nmap.sh

#!/bin/bash
#by Mr.Zhang
#nmap script
#2023-12-01

echo "########################$ip#####################" >> /root/nmap.log
echo $(date "+%x%X") >> /root/nmap.log
nmap -sS 192.168.137.252 >> /root/nmap.log
# 赋予执行权限
chmod u+x nmap.sh

# 执行脚本
./nmap.sh

# 查看日志文件
cat /root/nmap.log

优化脚本:vim nmap.sh

#!/bin/bash
#by Mr.Zhang
#nmap script
#2023-12-01

###########################################
ip="192.168.137.252"
datetime=$(date "+%x%X")
logfile=/root/nmap.log
###########################################
echo "#######$ip######" >> $logfile
echo $datetime >> $logfile
nmap -sS $ip >> $logfile
echo "scan successfully!!!"
echo "" >> $logfile

c. 脚本执行方式
  • 命令解释器执行脚本:使用命令解释器执行脚本可以不给脚本x权限,使用bash或sh
  • source或者“.”命令执行脚本,在当前shell环境执行脚本中命令,不开启子shell,不需要给脚本添加x权限
  • 使用绝对路径和相对路径执行脚本需要给脚本添加x权限
d. 脚本测试

写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作:

-n 只读取shell脚本,但不实际执行

-x 进入跟踪方式,显示所执行的每一条命令

-v 一边执行脚本,一边将执行过的脚本命令打印到标准输出,如果有错误会给出错误提示。

# 模拟错误,删除nmap.sh脚本里一个双引号
# 检测nmap.sh是否有语法错误
sh -n nmap.sh

# 使用-x追踪
sh -x nmap.sh

e. tee 命令
  • 描述:将标准输入在显示屏上输出并将其内容保存到文件中
  • 语法:tee [选项] [文件]

-a, --append 内容追加到给定的文件而非覆盖

f. echo 命令
  • 描述:带颜色显示内容
  • 语法:echo [选项]

-e:激活转义字符,使用-e选项时,若字符串中出现以下字符,则特别加以处理

插入换行制表符:

  • \n 换行且光标移至行首
  • \t 插入tab
  • \nnn 插入nnn(八进制)所代表的ASCII字符

颜色显示格式:

echo -e “\033[背景颜色;文字颜色m 文字内容\033[0m”

echo -e “\e[背景颜色;文字颜色m 文字内容\e[0m”

文字颜色

背景颜色

控制选项

"\033[30m 黑字 \033[0m"

\033[40;37m 黑底白字 \033[0m

0m 关闭所有属性

"\033[31m 红字 \033[0m"

\033[41;37m 红底白字 \033[0m

1m 设置高亮度,加粗

"\033[32m 绿字 \033[0m"

\033[42;37m 绿底白字 \033[0m

4m 下划线

"\033[33m 黄字 \033[0m"

\033[43;37m 黄底白字 \033[0m

5m 闪烁

"\033[34m 蓝字 \033[0m"

\033[44;37m 蓝底白字 \033[0m

7m 反显

"\033[35m 紫字 \033[0m"

\033[45;37m 紫底白字 \033[0m

\033[36m 天蓝字 \033[0m

\033[46;37m 天蓝底白字 \033[0m

"\033[37m 白字 \033[0m"

\033[47;30m 白底黑字 \033[0m

# 显示黑底绿色字
\033[47;30m 白底黑字 \033[0m

# 显示红底黑字
echo -e "\033[41;30m hello world\033[0m"

# 显示黑底蓝字加粗
echo -e "\e[40;36;1m apache server stop... \e[0m"

g. read 命令
  • 描述:提示用户从键盘读入数据,赋给变量。从而实现简单的交互过程
  • 语法:read [选项] [变量名1] [变量名2]

-p:用来设置提示信息

-t:设置等待时间,单位是秒,若在规定时间内未输入自动跳出

执行时将从标准输入设备(键盘)读入一行内容,并以空格作为分隔符,将读入的各字段挨个赋值给指定的变量,多余的内容赋值给最后一个变量。若指定的变量只有一个,则将整行内容赋值给此变量。

#!/bin/bash
#this is a test read script

read -t 10 -p "请输入您的姓名:" name
read -t 10 -p "请输入您的年龄:" age
read -t 10 -p "请输入您的电话:" phone

cat << EOF
***********************
姓名:$name
年龄:$age
电话:$phone
***********************
EOF

测试正常输入:

测试输入超时:

3、Apache 安装脚本
a. 初始脚本
#!/bin/bash
#apache auto install script
#2022-12-01 

yum -y install apr apr-devel apr-util apr-util-devel pcre pcre-devel gcc gcc-c++ net-tools
tar -zxvf /root/httpd-2.4.54.tar.gz -C /usr/local/src/
cd /usr/local/src/httpd-2.4.54/
./configure --prefix=/usr/local/apache
make -j 2
make install
rm -rf /usr/local/src/httpd-2.4.54
/usr/local/apache/bin/apachectl start
netstat -antup | grep 80
# 关闭apache
/usr/local/apache/bin/apachectl stop

# 卸载apache
rm -rf /usr/local/apache/
b. 脚本优化
#!/bin/bash
#by Mr.zhang
#apache auto install script

packages="apr apr-devel apr-util apr-util-devel pcre pcre-devel gcc gcc-c++ net-tools"
apache_version="httpd-2.4.54"
src_dir="/usr/local/src/"
install_dir="/usr/local/apache"
cpu_count=2
ip=$(ifconfig ens33 | grep netmask | awk '{print $2}')
logfile="/root/apache_install.log"

echo "#############################" | tee -a $logfile
echo "#安装apache依赖包" | tee -a $logfile
yum -y install $packages &>> $logfile
echo -e "\e[32;1m install apache packages successful\e[0m"
echo "#安装 apache"
tar -zxvf /root/${apache_version}.tar.gz -C $src_dir &>> $logfile
cd $src_dir$apache_version
echo "开始预编译" | tee -a $logfile
./configure --prefix=$install_dir &>> $logfile
echo -e "\e[32;1m ./configure successful \e[0m"
echo "#开始编译" | tee -a $logfile
make -j $cpu_count &>> logfile
echo -e "\e[32;1m make successful \e[0m"
echo "#开始安装" | tee -a $logfile
make install &>> $logfile
echo -e "\e[32;1m make install successful \e[0m"
echo "#删除解压包" | tee -a $logfile
rm -rf src_dir/$apache_version
echo "#启动 apache" | tee -a $logfile
$install_dir/bin/apachectl start &>> $logfile
echo "#查看端口号" | tee -a $logfile
netstat -antup | grep 80 | tee -a $logfile
echo "#访问测试"
curl $ip | tee -a $logfile
echo -e "\e[32;1m apache start successful\e[0m" | tee -a $logfile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值