Shell脚本基础02

Shell脚本基础02 - 1

整理awk、shell变量运算符等


shell变量

#shell变量命名规则
1. 以字母开头
2. 中间不能有空格
3. 不能使用标点符号
4. 不能使用bash关键词
#set与env
set #所有变量
env #环境变量
#变量赋值
var=value
echo $var
unset var
export var=value#定义全局变量
#变量名边界
var=value
echo ${var}something

shell运算符

#算数运算符
+ #加
- #减
* #乘
/ #除
% #取余
#比较运算符
< #小于
> #大于
<= #小于等于
>= #大于等于
== #比较
!= #不等于
&& #并且
|| #或运算
#赋值运算符
=
+=
*=
/=
%=
#shell计算器
##$[]
echo $[1+1]
##(())
aaa=1
((aaa++))
##expr
aa=1
bb=2
res=`expr $aa + $bb`
##bc浮点计算器
echo "scale=2;345/1000" | bc -l #保留两位小数,计算345除以1000

测试语句

引用一篇比较不错的test命令介绍 Linux test命令

#测试语句
echo $? #返回上一句命令是否执行成功的布尔值
(())#数字测试符
[[]] #其他测试符
##混合测试例子
[[ expr1 && expr2 ]] (( expr1 || expr2 ))

流程控制语句

##判断语句
if [判断语句]
then
    [执行语句]
elif [判断语句]
    [执行语句]
else
    [执行语句]
fi
##循环语句
while [判断语句]
    do
        [执行语句]
done

参数传递方式

----域分隔符模式----
#!/bin/bash
#参数用以[空格]或者 [tab]分隔,称作域分隔符
var0=$1 #第一个参数
var1=$2
echo $var0
echo $var1
----请求输入模式----
#!/bin/bash
read -p "plz input something:" var0
echo $var0
-----------------

awk

引用一篇比较不错的awk命令介绍 Linux awk命令

#语句格式
awk [选项] '命令' 文件
#awk使用例子整理
awk -F: '{print $1,$4}' #以冒号为分隔,打印第一的与第四列内容
awk -F: '{print $1,NF}' #总数
awk -F: '{print $1,NR}' #行号
awk -F: 'NR==1{print $1,NF}' #定位
awk -F: 'NR<=3{print $1,NF}' #打印3行
awk -F: 'NR>=3 && NR<=5{print $1,"----",NF}' #大于3小于5的行
awk -F: 'NR<=3 || NR>=5{print $1,"----",NF}' #打印小于3大于5的行
awk -F: '/nologin$/{print $1}' #匹配nologin结尾的用户名[正则表达式]
awk -F: '$1~/^r.*t$/{print $3}' #匹配$1
awk -F: '$3>=7{print NR,$1}' #匹配$3大于等于7
awk -v x=$count -F: '$3 >= x{print NR,$1}' #变量传递
ifconig | awk 'NR==2{print $2}' #取IP

#awk文本处理

  1. 打印uid在30~40范围内的用户名
    awk -F: 'NR>=30 && NR<=40{print $1}' /etc/passwd
  2. 打印第5-10行的行号和用户名
    awk -F: 'NR>=5 && NR<=10{print NR,$1}' /etc/passwd
  3. 打印奇数行
    awk -F: 'NR%2{print NR,$1}' /etc/passwd
  4. 打印偶数行
    awk -F: 'NR%2==0{print NR,$1}' /etc/passwd
  5. 打印字段数大于5的行
    awk -F: 'NF>5{print NR,$0}' /etc/passwd
  6. 打印UID不等于GID的用户名
    awk -F: '$3!=$4{print $1}' /etc/passwd
  7. 打印没有指定shell的用户
    awk -F: '$7==""{print $1}' passwd

shell脚本编写


自动部署、初始配置、并启动nginx反向代理服务和三台web服务

主服务器脚本

#!/bin/bash
rpm -qa | grep epel
if [ $? != '0' ]
then
    yum -y install epel-release
fi
rpm -qa | grep nginx
if [ $? != '0' ]
then
    yum -y install nginx
fi
#变量
function inputipport(){
        ip0=a
        port0=a
        ipportstr=a
        read -p "Plz input ip:" ip0
        read -p "Plz input port:" port0
        ipportstr=${ip0}:${port0}
        echo $ipportstr
}
#输入三台服务器IP端口
echo "请输入第三台服务器信息"
ipport0=`inputipport`
ipport1=`inputipport`
ipport2=`inputipport`
#修改nginx文件
sed -ri '/^[\ ]*#/d' /etc/nginx/nginx.conf
sed -ri "/http \{/a\ \ \ \ upstream webCluster\{\n\ \ \ \ \ \ \ \ server $ipport0;\n\ \ \ \ \ \ \ \ server $ipport1;\n\ \ \ \ \ \ \ \ server $ipport2;\n\ \ \ \ }" /etc/nginx/nginx.conf
sed -ri '/\ \ \ \ \ \ \ \ location\ \/\ \{/a\ \ \ \ \ \ \ \ \ \ \ \ proxy_pass http://webCluster/;' /etc/nginx/nginx.conf
#启动服务器
systemctl enable nginx
systemctl start nginx
systemctl stop firewalld

web服务器配置脚本

#!/bin/bash
rpm -qa | grep epel
if [ $? != '0' ]
then
    yum -y install epel-release
fi
rpm -qa | grep nginx
if [ $? != '0' ]
then
    yum -y install nginx
fi
#变量
ip0=`ifconfig |awk 'NR==2{print $2}'`
#修改web服务器配置
sed -ri '/^[\ ]*#/d' /etc/nginx/nginx.conf
sed -ri '/\ \ \ \ \ \ \ \ location\ \/\ \{/a\ \ \ \ \ \ \ \ \ \ \ \ root /webRoot/;\n\ \ \ \ \ \ \ \ \ \ \ \ index\ index.html;' /etc/nginx/nginx.conf
#建立web目录建立index文件
mkdir /webRoot/
touch /webRoot/index.html
echo "$ip0" > /webRoot/index.html
#启动nginx服务器
systemctl enable nginx
systemctl start nginx
systemctl stop firewalld

监控脚本:监控每台机器的内存使用率>70%,则输出报警信息

#!/bin/bash
while true
do
        buffercached=`free | sed -n '2p' | awk '{print $6}'`
        used=`free | sed -n '2p' | awk '{print $3}'`
        usedmem=$(($buffercached+$used))
        totalmem=`free | sed -n '2p' | awk '{print $2}'`
        memratio=`echo "scale=2;$usedmem/$totalmem" | bc -l | sed -r 's/.//'`
        if [[ $memratio > 70 ]]
                then
                        echo "当前内存使用率已经超过70%,清即使清理不必要进程!"
        fi
        sleep 5s
done

2 thoughts on “Shell脚本基础02”

Leave a Reply

Your email address will not be published. Required fields are marked *