Linux脚本编写基础
在Linux的管理当中,我们有时候总要做一些重复的工作,或者有的工作需要大量的步骤,有时候会记不住,我们可不可以有一种工具可以帮我们来进行工作呢,我们就可以使用脚本,脚本说的简单点就是命令的集合,把我们要使用的命令写进脚本,每次使用的时候只需运行脚本就行了,我们以后也可以查看我们所进行的配置,为我们的工作提供方便和提高效率。
一、语法基本介绍:
脚本的开头以下面的开始
#!/bin/bash
#!后边告诉我们执行该文件的程序,也就是我们要使用的shell,我这里用bash
注释:
有的时候我们的脚本可能长时间不使用,或者贡献出来方便大家,我们可能忘了脚本是做什么工作的,别人也可能不会了解脚本的具体功能,我们可以在脚本里加入说明,也就是注释,这就用到
#:这个符号,在脚本中以#开头的都是注释掉的句子,在脚本中是不会执行的
一个好的脚本,建议大家使用注释
二、变量
一个脚本中,我们可能要多次使用同一个值或命令,我们就可以使用变量
变量的类型:
局部变量
局部变量只对当前shell有效
环境变量
对当前shell和子shell均有效,一般仅仅在登录的脚本中使用
特殊变量
$? 引用上一条命令的结果返回值
0:成功
1~255:失败 1,2,127 系统预留 其余的可自定义
位置变量
用于引用脚本后面传递过来的参数 $1,$2.....
变量的声明
变量名=内容
变量命名:
1、
只能包含字母、数字和下划线,并不能以数字开头
2、
不能与关键字冲突
引号:
‘’ 单引号完全引用其中的内容
`` 反引号,命令引用,引用命令的结果
“” 双引号中进行变量的替换,变量赋值中依然可以有变量
变量的引用:
脚本中变量的引用:
$变量名
三、函数:
变量可以帮助我们引用一个值,有时候我们在一个脚本中也可能会使用重复的一段命令,我们就可以通过定义函数来实现
函数就是脚本中的功能模块
Bash函数的定义:
bash中定义函数:
function FUNC_NAME {
body
}
FUNC_NAME(){
body;
}
函数的返回值:
默认为函数调用时最后一个命令的状态返回值
自定义函数返回值
return NUM
函数还能够接受参数
举例:
#!/bin/bash
#创建变量compare
compare () {
#$1表示传递过来的参数,大于2,就将10当做函数的返回值,否则就将20当做函数的返回值
If [ $1 -gt 2 ];then
Return 10
Else
Return 20
Fi
}
#将3当做参数传递给函数中的$1,
compare 3
N=$?
if [ $N -eq 10 ];then
Echo "greater than 2"
else
Echo "less than or equal to 2"
fi
#最后结果显示greater than 2
四、脚本的流程控制:
通过流程控制,来得到我们想要的结果,流程控制简单就是条件的判断
1、
条件命令测试
条件测试 [ experssion ]
[ A -a B ] A与B
[ A -o B ] A或B
! 表示取结果的反值
文件测试
[-e file] 测试文件是否存在
-f 测试文件是不是普通文件
-d 测试是不是目录
-r 当前用户对文件是否有读权限
-w 当前用户对文件是否有写权限
-x 当前用户对文件是否有执行权限
整数比较 双目操作,NUM 操作符 NUM
[2 -eq 3]
-eq:等于
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-ne::不等于
字符比较格式和整数比较相同,单操作符就是就是我们使用的运算符号,字符比较的大小根据ASCII码。
字符串操作符,[[ ]] >,<,>=,<=,!=,==/=。
[ 2 = 2 ]
字符转测试,还有单目测试
[ -z "字符串" ] 测试字符串是否为空,空为真
[ -n "字符串" ] 与 -z 相反,不空为真
2、if:
if 条件; then
命令
elif 条件 ; then
命令
else
命令
fi
从字面我们就可以明白,如果条件为真,就执行下面的命令,如果有多个判断可以使用elif,当第一次判断为假,就执行下面的判断,else表示否则,当所有判断都为假的时候执行的命令,else不需要的可以省去。
举例:
#!/bin/bash
if [ 2 -lt 3 ];then
echo “2”
else
echo "3"
fi
这个脚本就是如果2小于3,就将2显示出来,否则就显示3,明显的最后显示的是2
3、
case
case :表达式可以用来匹配一个的字符串,而不是数字。
case ... in
...)
命令
;;
(千万不要忘了双引号)
...)
命令 ;;
esac
举例:
#!bin/bash
read -p "command:" A
case $A in
Q|q)
echo "quit";;
*)
echo "$A";;
esac
read -p 命令用来实现与用户的交互,将用户输入的值赋值给变量A;当变量A为Q或q时就显示quit,若为其他字符,就显示出字符本身
4、for循环
查看一个字符串列表,然后列表中的字符依次赋值给一个变量,然后执行命令,直到值被匹配结束
for var in 字符表 ;do
命令
done
字符表含多个字符,用空格隔开,字符表可以写成集合{0..9},表示0-9,{a..z}表示a-z。
举例:
用for循环计算出100个数的和
#!/bin/bash
#定义一个整形变量为0
Declare -i SUM=0
#使用for循环,将1-100的数一次复制给变量i
for i in {1..100};do
#算数运算
SUN=$[$SUM+$I]
done
#显示出100个数的和为5050
echo “$SUM”
5、while循环
while 条件;do
命令
done
While命令的意思就是,当满足条件的时候就执行下面的命令
举例:使用while计算100个数的和
#!/bin/bash
#定义一个整形变量为SUM=0,N=0
declare -i SUM=0
declare -i N=0
#使用while 循环,当N小于等于100就执行
while [ $N -le 100 ];do
#将变量SUM和N的和重新赋值给变量SUN
SUM=$[$SUM+$N]
#N每次加一
let N++
done
#显示结果
echo “$SUM”
6、until循环
until 条件;do
命令
done
until命令和while正好相反,执行命令,直到命令的结果满足条件就停止
举例:使用until计算100个数的和
#!/bin/bash
#定义一个整形变量为SUM=0,N=0
declare -i SUM=0
declare -i N=0
#使用until 循环,当N大于100循环就结束
until [ $N -gt 100 ];do
#将变量SUM和N的和重新赋值给变量SUN
SUM=$[$SUM+$N]
#N每次加一
let N++
done
#显示结果
echo “$SUM”
7、关键字break,continue
b
reak: 表示直接跳出循环
continue:表示不执行下面的命令跳出循环,直接执行下一次命令
举例:
#!/bin/bash
#定义一个整形变量为SUM=0,N=0
d
eclare -i SUM=0
declare -i N=0
While true;do
#将变量SUM和N的和重新赋值给变量SUN
SUM=$[$SUM+$N]
#如果N的值小于等于100,就本身加一
if [ $N -le 100 ];do
let N++
#结束这次循环
continue
else
#否则,当N大于100的时候,脚本结束
break
fi
Done
#显示结果
echo “$SUM”
8、嵌套使用
有时候if,case等单独使用并不能满足我们的哪个,我们可以根据需求进行嵌套使用
五、算数运算:
let VAR_NAME=2+3 将运算的值赋给变量
$[2+3],$((2+3))常用方法,赋值给变量使用echo回显
let VAR_NAME=2+3 将运算的值赋给变量
N=$[$N+1] 相当于let N++ 每次加一
N=$[$N- 1] let N -- 每次减一
N=$[$N+$I] let $N+=$I 两个变量相加
N=$[$N-$I] let $N―=$I 两个变量相减
N=$[$N*$I] let $N*=$I 两个变量相乘
N=$[$N%$I] let $N%=$I 两个变量相除
expr 2 + 3 命令引用使用,一定注意中间的空格
六、
脚本的运行
脚本的权限默认是没有执行权限的,要想运行脚本有两种方式
1.
#bash 脚本名
2.
为脚本添加执行权限
#chmod +x 脚本名
在脚本当前目录下执行
#./脚本名