脚本编程Bash Shell
1.概念:
Shell脚本是包含一系列命令的文本文件
Shell读取此文件并执行命令
2.应用场景:
重复性操作
批量事务处理
自动化运维
定时任务执行
3.每一个shell要有开头的定义,正常是
#!/bin/bash
4.打印
echo ‘要打印的东西’
5.定义好的脚本需要加上执行权限
chmod +x 脚本路径
6.三种调用方式
(1)路径调用:如果在当前目录,则使用./test.sh,绝对路径也可以
(2)普通脚本执行:sh 脚本路径
(3)指定b shell 执行:/bin/bash 脚本路径
7.变量的定义
(1)直接赋值法:a=1 b=”abc”
(2)数组:
①vi编辑器:
#!/bin/bash
arr=(1 2 3 4 10)
echo $arr
echo ${arr[0]}
echo ${arr[4]}
echo ${arr[@]}
②输出结果:
[root@cent01_c]# ./array.sh
1
1
10
1 2 3 4 10
③所以直接打印数组显示的是第一个值,而不是所有的值
arr[@]则可以打印数组所有的结果
(3)引用赋值法:b=
a
c
=
a c=
ac={b}
(4)引用命令执行结果的赋值:a=ls -l
8.预定义变量
(1)$n:$0代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
$# 命令行参数或位置参数的数量
$? 最近一次执行的命令或shell脚本的出口状态
$* 表示所有的位置参数,其值是所有位置参数的值
$- 显示Shell使用的当前选项
@
与
@ 与
@与*相同,但不同之处是,
@
分
割
成
一
个
个
字
符
串
,
而
@分割成一个个字符串,而
@分割成一个个字符串,而*是一个整的字符串
(2)定义vi编辑器:
#!/bin/bash
echo $0
echo $@
echo $-
echo "first args:$1"
echo "args count is:$#"
echo "all args:$*"::
(3)输出结果:
[root@cent01_c]# ./args.sh 15 abc 9da5w
./args.sh
15 abc 9da5w
hB
first args:15
args count is:3
all args:15 abc 9da5w
9.执行变量的运算
b=expr $a + 1
b=$((
a
+
1
)
)
b
=
a + 1 )) b=
a+1))b=[ $a + 1 ]
(1)再判断条件中使用计算:在中括号内侧及运算符两边都要加空格
10.Shell流程控制(!!流程代码均可以写成一行,但要用 ; 分割)
(1)if else
①单if:if 判断语句
then 代码
fi
②if else:if 判断语句
then 代码
else 代码
fi
③if else-if else:#!/bin/bash
a=$1
if [ $a -lt 10 ]
then
echo 'less than 10'
elif [ $a == 10 ]
then
echo 'equals 10'
#else
echo 'great than 10'
fi
(2)case:
#!/bin/bash
a=$1
case $a in
1)echo ‘$a is 1’
;; --;;表示break
2)Echo ‘$a is 2’
;;
*) echo ‘nothing is chosed’
esac
(3)while:
#!/bin/bash
a=1
while [ $a -le 10 ]
do
echo $a
#a=$[$a+1]
Let a++
done
(4)for :
#!/bin/bash
b=1
for ((;;))
do
if [ $b -gt 10 ]
then
break
fi
echo $b
let b++
done
或者将条件写入for的判断中
#!/bin/bash
for ((b=1;b<=10;b++))
do
echo $b
done
(5)until:直到满足条件为止
#!/bin/bash
a=1
until [ $a -eq 10 ]
do
echo $a
let a++
done
11.数值型
大于:-ge 小于:-lt 等于:-eq或== 不等:-ne
12.字符串型
等于:=或== 不等:!= 是否为空:-z 字符串
13.if条件语句可省略成:[[ 条件语句 ]] && 结果语句 || 结果语句
true为&&后的结果,false为||后的结果
14.在单引号中不能直接用${a}引用变量,而双引号中可以