脚本

一、脚本概述与要求

1、脚本原理

脚本的意义:通过命令解析行的方式帮我们自动取执行设定好的命令代码;

脚本里的命令是一行一行的执行内容里的命令;脚本里写的命令必须都是非交互式命令”。

假如我们把脚本挂在定时任务里,那就是自动在某个没有人的时间里,自动触发程序。

2、书写脚本格式要求

后缀必须以.sh结尾

内容第一行必须以#/bin/bash

3、脚本的开启要求

sh命令或者bash命令开启

Linux下,绝对路径执行脚本,不告诉它用什么解释器,会默认用bash解释器,

以绝对路径,直接执行脚本(脚本文件必须有x权限)

chmod +x benchi.sh

4、脚本的逻辑性判断

1)判断命令:

-f +文件名  判断是否是文件(是否存在)      echo$

-d +目录  判断对象是否是目录(是否存在)    echo$

-d  判断目标是否存在(无论是文件或目录)

-z  判断某个字符串是否为空

eg[ -z “” ] && echo || echo “不空”

 

判断完后,输入echo$ 输出0即判断正确,非0则错误,或者不存在

eg

test -d /root/asdf && cd /root/asdf && pwd || echo ”不去了

执行前面的test -d /root/asdf,如果失败则不执行&&后面的命令;

eg[-d /root ] || mkdir -p /root

cd /root

判断/root是否是目录,是否存在;如果存在则不执行||后面的命令

直接执行下一行;

如果不存在,则执行||后面的命令,然后再执行下面的命令。

2[  ]真假判断条件

xx=”welcome”

[ $xx == “welcome” ] && echo “0” || echo “1”

两个等号就是等于,   !=不等于

[] -a   并且,两端都为真

[] -o   或,有一个为真

[] !    相反则为真

(3)大于与小于判断

-gt命令:(great than)大于     -ge命令:大于等于

-lt 命令:(less than) 小于       -le 命令:小于等于

-eq命令:等于                -ne 命令:不等于

(4)关于逻辑&& ||

&&符号的左边执行正确(0),则执行右边,否则不执行

|| 符号的左边执行错误(非0),则执行右边,否则不执行

||前面的命令执行失败,则执行||后面的命令。

eg:真假 && cd /root || cd /home

(5)看变量字符的数量${#x}

6sh -x 跟踪判断,每一条输出和命令都能看到执行的过程,用来判断哪一条代码出错。

 

二、交互式脚本

1、让用户输入变量

read  + 变量

read num  num是变量)

echo $num  $num就是输出上面的变量)

这时候输入111

输出的就是111

2、用户提示语参数

1read -p 提示语参数-p

read -p ”文本提示“  变量(变量首字母大写)

eg:

#!/bin/bash

read -p “请输入数字:” num

echo $num

2read -p具体应用

read -p “请输入你的成绩:” num

[ $num -lt 60 ] && echo “不及格

[ $num -eq 60 ] && echo”及格

[ $num -gt 60 -a $num -lt 70 ] && echo “

[ $num -ge 70 -a $num -lt 80 ] && echo”良好

[ $num -ge 85 -a $num -le 100 ] && echo “优秀

[ $num -ge 100 ] && echo “sb”

User=baoma

Passwd=123123

read -p “请输入账号:” user

read -p “请输入密码” passwd

[ $User == $user ] && echo “账号正确” || echo “账号错误”

[ $Passwd == $passwd ] && echo “密码正确” || echo “密码错误”

3)通过参数的方式进行交互

例如:/etc/init.d/postfix start/etc/init.d/目录下的文件都是脚本,但是却可以通过加start启动脚本,这就是参数传递。

$#      表示参数的个数

$*      横向显示所有参数 ($*将命令行的所有参数看成一个整体

$@     横向显示所有参数 ($@则区分各个参数

$0      代表脚本文件的执行路径

$1...$n   对应传入不同的参数

4)模拟C语言计算

#/bin/bash

a=1

b=2

echo “$((a+b))

用两个小括号模拟C语言运行

5)输入重定向

cat << FOF    FOF是结束符号,碰到这个符号就截止)

输入命令后,开始换行输入内容,最后把结果传给cat,输出到屏幕上。

cat > BENCHI.txt << FOF

输入命令后,开始换行输入内容,最后把结果传给catcat再重定向到文件里。

3、反引号``

xx=`which cp`

echo $xx

反引号里命令的执行结果赋值到xx上,然后输出到屏幕上

4、强行终止脚本 exit

exit  (碰到这个字样就强行终止)

[ $# -eq 3 ] && echo “你输入了3个参数”&& exit

echo “你输入的参数不对”

##如果输入的参数个数等于3个,则输出“你输入了3个参数”然后退出

如果输入的参数个数不符合条件,则输出第二行“你输入的参数不对”

三、逻辑语法

1if语句(单条件)

if [条件]            如果

elif[条件]           否则如果  

then               

else               否则

fi 结尾符号

eg

read -p “请输入一个数字:”num

if [ $num -eq 66 ]

then

        echo “正确”

else

        echo  “错误”

fi

##请输入一个数字,如果输入66,则显示正确,如果输入非66,则显示错误。

2、if语句多条件

执行顺序是从上到到下优先级,执行完成后,后面不执行。

read -p “请输入你的成绩:” num

if [ num -ge 100 ]          如果:

then                    则:

echo “牛逼

elif [ num -ge 85 ]           否则如果:

then                    则:   

echo “优秀

elif [ num -ge 70 ]           否则如果

then                    

echo “优秀

elif [ num -ge 60 ]           否则如果

then                    

echo “及格

else                     否则

echo“不及格”      就

fi                       结束

四、搭建yum仓库

五、for循环语法

1for循环概述

for i in 13579

do

echo $i

done

原理:i13579里一个一个得取值,先把1赋值给i,然后i1带入循环体中,(循环体就是dodone之间)进行这之间的输出到done结束,再返回赋值下一个,再带进循环体....直到都取完输入完。

2for循环后面可以跟一个命令

for循环后面可以跟一个命令,但是要加反引号,而且需要横排的命令

egfor i in `ls /root | xargs`

3、for变种C语言循环(())

for((i=0;i<10;i=i+1))

解析:先给i设定一个初始值i=0;然后设定一个循环条件i<10;如果到不符合这个条件就结束循环,再设定一个条件递增公式i=i+1,再进入循环条件里判断,最后再执行

4、判断网段里IP地址哪些存活

for ((ip=1;ip<255,ip++))

do

ping -c 1 192.168.154.$ip &>/dev/null

if [ $? -eq 0 ];then

echo”192.168.154.$ip活的

fi

done

ping -c 1ping一次结束,不再ping

ping -i 0.1:以0.1秒的速度ping

六、其他循环体

1while循环概述

read -p “输入:” i

while [ $i -lt 10 ]

do

echo $i

let i++

done

无限循环,后面加一个冒号,什么都不用加了,进入无限循环

while

2、break

碰到break跳出当前的循环,执行循环下面的内容...

3continue

终止当前的本次循环,回到当前循环开头再走一遍。

4return

碰到return直接跳出函数体,执行函数体后面的内容...

七、case

1case的基础用法:

一般用在没有优先级的场合,每种条件的情况看起来非常简单;都是平级的,没有优先级关系,通常启动脚本的时候,只用这种格式。

 

2、模仿系统脚本详细用法的步骤

 

1)首先要引用一个函数库,这样就可以用action命令(有系统脚本的效果)

2. 是在当前位置下引用函数,

3$1 代表脚本外的变量,如:startstop

4)要想脚本外专业的显示开启或关闭(okfail的字样)就要这样写。

 

3、让chkconfig识别自己写的脚本

在脚本的开头加# chkconfig: 35 90 10

35代表在35模式中启动,90关机的优先级和10开机的优先级(后面两个数字不用记)

使用命令:chkconfig --add case.sh

chkconfig --list cash  查看该服务开机自启动状态

八、函数式编程

1、函数的概述

把一些小过程,写到函数里,当我们需要用到这些小过程的时候,只要调用函数名字,即可实现。

无论什么编程语言,基本只有三种编程方法

1、面向过程:

就是按照一定的顺序进行代码的编写,不能跳步。

2、面向对象

3、函数式编程

这三种模式,并不是语法,而是教我们如何取编写代码的方法论。

shell这种语言里,只能支持面向过程这种编程方法。

2、函数的写法格式

 

function 是函数体里必须要有的

xicai是这个函数的名字

(){}是必须要有的格式

最后调用的时候,需要在调用的位置写出函数的名字。

3、函数的源码编译应用

 

原文地址:https://www.cnblogs.com/kakajiang/p/9899556.html