首页 > 代码库 > Linux Bash脚本基本语法知识
Linux Bash脚本基本语法知识
写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。
前提:读者能够基本使用一款文本编辑器以及了解文件的权限概念。
准备工作
在/home目录创建script文件用于保存所有的脚本程序:
# mkdir /home/script
# cd /home/script/
Bash脚本的基本输入输出
第一个bash脚本:
# vim ./hello-world.sh
说明:
"#!"是一个约定标记,它告诉系统这个脚本需要什么解释器来执行
作为可执行脚本:
# chmod +x ./hello-world.sh
# ./hello-world.sh
注意:一定得写成./hello-world.sh而不是hello-world.sh
1.基本输入语句:
第三行,read命令,读取来自键盘输入的变量(何为变量?将在下一节进行说明说明)。
2.基本输出语句:
第五行,echo命令,向屏幕窗口输出文本。
Bash脚本的变量
变量到底是个什么东西?
可简单的理解为,是存储数据的地方,可以通过引用这个变量得到其数据。
变量名的命名规范:
首字符必须为字母;
中间不能有空格;
不能使用标点符号;
不能使用bash里的关键字。
如何使用变量?
# myName="muluhe"
# echo ${myName}
说明:
${变量名}表示引用变量中的内容。
注意:在此处,花括号不是必须,但我建议在引用变量时,加上花括号,这是一个比较好的编程习惯。
为什么建议加花括号?
# echo ${myName}yes
如果不加花括号,表示输出nyNameyes这个变量的内容。
Bash脚本的注释
以#号开头的就是注释,解释器会忽略(除第一行的#!/bin/bash外)。
有没有一种方式可以对多行进行注释呢?
Bash脚本的字符串
字符串是bash脚本编程中最常用的数据类型,字符串可以常常用单引号或双引号引起来。
单引号:
str="this is a string"
单引号字符串的限制:
单引号里任何字符都会原样输出,单引号字符串中的变量引用时无效的;
单引号字符串中不能出现单引号(对单引号进行转义也不行)。
双引号:
myName="muluhe"
str="Hello, my name is ${myName}\n"
双引号的特点:
双引号里可以对变量进行引用
获取字符串的长度:
echo ${#myName}
提取子字符串:
string="my name is muluhe."
echo ${string:1:4} # 输出my n
Bash脚本的数组
bash脚本仅支持一维数组且不限定数组元素的大小。
定义数组:
在bash中,用括号来表示数组,数组元素用“空格”符号分隔开。定义数组的一般形式:
数组名=(值1 值2 ... 值n)
例如:arrayName=(0 1 2 muluhe)
还可以单独定义数组的各个分量:
arrayName[0]=100
arrayName[1]=200
arrayName[3]=300
可以不使用连续的下标,且理论上下标的范围没有限制。
注意,数组的下标是从0开始的。
数组的长度:
${#arrayName[@]}:表示数组的长度
数组的复制:
例如:arrayName2=${arrayName[@]}
向数组中追加元素:
演示实例:复制一个数组中下标为偶数的元素至新数组中
从数组中删除元素:
unset arrayName[1]
Bash脚本的if...then选择
1.简单条件判断式
if [ 条件判断式 ]; then
当条件判断式成立时,可以执行的内容;
fi
演示实例:
2.复杂条件判断式
<一个条件判断>
if [ 条件判断式 ]; then
当条件成立时,可以执行的内容;
else
当条件不成立时,可以执行的内容;
fi
<多个条件判断>
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以执行的内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以执行的内容;
else
当条件判断式一和二都不成立时,可以执行的内容;
fi
演示实例:
Bash脚本的case...esac选择
case...in...esac基本语法:
case ${变量名称} in
"第一个变量内容")
程序段
;;
"第二变量内容")
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序段
;;
esac
演示实例:
Bash脚本的while循环
while循环的基本语法:
while [ 条件判断式 ]
do
程序段落
done
说明:
当条件判断式成立时,就进行循环,直到条件判断式不成立时,退出循环
演示实例:
Bash脚本的until循环
until循环的基本语法:
until [ 条件判断式 ]
do
程序段
done
演示实例:
Bash脚本的for循环
for...do...done(固定循环)基本语法:
for var in con1 con2 con3 ...
do
程序段
done
演示实例:
for...do...done(数值处理)基本语法:
for (( 初始值; 限制值; 执行步长 ))
do
程序段
done
演示实例:
Bash脚本的continue与break
continue
跳出当前循环
演示实例:
break
终止所有循环
演示实例:
Bash脚本的function功能
function的基本语法:
function fname () {
程序段
}
演示实例:
Bash脚本的追踪与调试
bash [-nx] scripts.sh
参数:
-n : 不执行scripts.sh,仅查询语法问题;
-x : 将所执行的scripts.sh内容显示到屏幕上;
实例演示:
利用图12脚本进行测试:# bash -x function-test.sh one
说明:图12的脚本名称为function-test.sh