linux 脚本 for 语法,Linux里你必须掌握的Shell语法

For循环##通常For循环用来执行一些重复不变步骤

for i in `ls /tmp`    ##为ls /tmp设置变量为i

do       ##所以执行do与Done内的操作,do对应需要done结尾

rm -rf $i      ##删除ls /tmp查询到的内容

done

##参考

#!/bin/sh

for i in `seq 10`

do

echo $i

done

##分库备份

#!/bin/bash

dbpass="dahaoshanhe123"

dbsock=/u01/instance/3306/3306.sock

dblist="show databases;"|grep -Evi "Database|info|per|test|mysql"

dbopt="-B -F --single-transaction --master-data=2 --set-gtid-purged=OFF --triggers --routines --events"

for dbname in `mysql -uroot -p${dbpass} -S ${dbsock} -e $dblist`

do

/usr/local/mysqlone/bin/mysqldump -p${dbpass} -S ${dbsock} ${dbopt} $dbname |gzip >  /u01/instance/3306/backup/${dbname}_$(date +%F)_$(date +%T).sql.gz

done

IF 判断语句

常用条件判断:

===判断文件是否存在

-f  判断某普通文件是否存在

-d  判断某目录是否存在

===判断文件权限

-r  判断文件是否为可读的属性

-w  判断文件是否为可以写入的属性

-x  判断文件是否为可执行的属性

===值比较

-eq  等于 应用于:整型比较

-ne  不等于 应用于:整型比较

-lt  小于 应用于:整型比较

-gt  大于 应用于:整型比较

-le  小于或等于 应用于:整型比较

-ge  大于或等于 应用于:整型比较

===逻辑的(and)与(or)

&&   逻辑的 AND 的意思, -a 也是这个意思

||  逻辑的 OR 的意思, -o 也是这个意思格式一:

#!/bin/bash

echo '##打印一个菜单,以单引号开头结尾

===============================

1+1=?

===============================

'

read -p '请输入你的答案': nub##read -p  添加注释,nub代表用户输入的内容

if [ $nub -ne 2 ];then##对用户输入的值进行判断,如果不为2,then代表则执行下面操作

echo "这都能算错,洗洗睡吧"##如果输入值不等2 反馈信息-->"这都能算错,洗洗睡吧"

else   ##否则

echo "小伙子很机智嘛"   ##反馈-->"小伙子很机智嘛"

fi

格式二:

#!/bin/bash

echo '

===============================

1+1=?

===============================

'

read -p '请输入你的答案': nub

if [ $nub -ne 2 ];then

echo "这都能算错,洗洗睡吧"

elif [ $nub -eq 2 ];then

echo "小伙子很机智嘛"

fi

##牢记常见的条件判断比如-eq,-ne,以及if判断的语法格式,[]内判断写法,前后需要有空格

While循环格式:

while  18 >    ##循环判断,孩子是否满18周岁

do

不可以去网吧##判断不满足条件,不可以去网吧,脚本结束

done

案例一:

#!/bin/bash

##连通性观察记录小脚本

##得出的的结果应该是18秒每次的间隔,添加监控IP只需要修改PIP的变量值即可

##运行时只需要sh shell_name &

##结束时只需要获取PID号码进行kill即可

PPATH=/root/IP监控/                             #设置一个存放连通性记录文件的位置

PIP="192.168.56.22"                             #添加一个要测试的IP

echo $$ > /root/IP监控/ping.pid        #打印该进程id到指定文件

[ ! -d $PPATH ] && mkdir -p $PPATH      #判断该路径是否存在,如果不存在则创建该路径

while true         #使用while无条件循环,若true永远执行该脚本除非手动停止,当然这个根据场景

do

/bin/ping $PIP -c 4 >/dev/null 2>&1             #在这里ping 4个失败的包将花去13秒

if [ $? -ne 0 ];then                            #判断上一步ping执行是否成功,判断若不成功则执行下一步

/bin/date >> $PPATH${PIP}.txt                   #打印ping不成功当前时间

fi

sleep 5                 #这里睡眠5秒,继续返回进行下一轮循环

done

## while true  #无限循环,除非手动停止

## while [-f /tmp/11]  ##如果/tmp下存在11文件则循环do-done的操作,当11不存在时脚本结束

Case语句案例一:

#!/bin/sh

echo '

===============================

1. install http

2. install mysql

===============================

'

read -p '请输入需要安装的程序编号': nub

case "$nub" in

1)##若用户输入的nub的变量值为1,则执行该步骤

yum install httpd -y##执行的操作

;;  ##固定格式,最后一个选项esac前不需要添加该符号

2)##若用户输入的nub的变量值为2,则执行该步骤

yum install -y iftop

;;

*)##若输入的内容不上以上的选项

echo "Please input [1/2]"

esac##case开头,case结尾

案例二:

case "$1" in

1)##若用户输入$1的变量值为1,则执行该步骤

yum install httpd -y##执行的操作

;;  ##固定格式,最后一个选项esac前不需要添加该符号

2)##若用户输入的nub的变量值为2,则执行该步骤

yum install -y iftop

;;

*)##若输入的内容不上以上的选项

echo "Please input [1/2]"

esac##case开头,case结尾

Shell函数#!/bin/bash

. /etc/init.d/functions##加载函数

function start(){##定义一个start的启动函数,{}内为执行函数进行的动作操作

service httpd start > /dev/null 2>&1

if [ $? = 0 ];then

action "启动中..." /bin/true  ##若启动无报错,则显示[  OK  ]

else

action "启动中..." /bin/false  ##若启动无报错,则显示[FAILED]

fi

}

function stop(){

service httpd stop > /dev/null 2>&1

if [ $? = 0 ];then

action "停止中..." /bin/true

else

action "停止中..." /bin/false

fi

}

function main(){

if [ $1 = "start" ];then

start

elif [ $1 = "stop" ];then

stop

fi

}

main $*##这里的$*就是把命令行接受的参数作为函数参数传给函数内部,是一种常用的手法

Expect交互自动化

当安装某个服务时,程序会交互的方式要求用户配置程序,比如在配置Redis、MySQL、OSSEC时[root@localhost ~]# mysql_secure_installation

Set root password? [Y/n] Y

New password:

Re-enter new password:

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

使用Expect后这些Y将由程序代替人工输入,对于某些没有RPM包的程序,比如OSSEC实现自动化部署成为一个可能

关于Expect更多资料可以查看本博客expect自动化交互脚本(1-3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值