bash编程语法

1、 Bash 编程基础

  • 变量
  • 引号
  • 数组
  • 控制语句
  • 函数

2、 Bash 变量

语法: Variable_name=value

3、 Bash 变量定义的规则

  • 变量名区分大小写,a和A为两个不同的变量。
  • 变量名可以使用大小写字母混编的形式进行编写。
  • 变量名与值之间的=两侧都不能有空格。
  • 在读取或打印变量时,需使用$+变量名。
  • 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。

4、 Bash 数据类型

  • 在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。

5、 Bash 变量的类型

  • 系统定义的变量
    • 通常是以大写字母形式存在
    • 如 BASH、SHELL等
  • 用户定义的变量
    • 多数以小写字母参与命名
    • 但不具有大小写强制性规定

6、 字符串的拼接

  • 基本语法 str3="${str1}${str2}
  • 字符串:your_name=“hogwarts”
  • 拼接字符串:greeting=“hello, “$your_name” !”

7、 Bash 引号

  • 输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别
  • 输出一个已定义的变量,则需要使用双引号

8、 数组

  • 数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合

  • 数组:array_name=(value0 value1 value2 value3)

    • 取数组:valuen=${array_name[n]}
    • 单独赋值:array_name[0]=value0
(1) 索引数组的声明和赋值
  • declare -a:这是一个declare命令的选项,用于声明一个数组类型的变量
declare -a Array_Name # 索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2

或

Array_Name=(
    [index_1]=value_1
    [index_2]=value_2
    )
(2) 关联数组的声明和赋值
declare -A Array_Name # 关联数组
Array_Name[name1]=value_1
Array_Name[name2]=value_2

或

Array_Name=(
    [name1]=value_1
    [name2]=value_2
    )
(3) 数组的访问
declare -a arr1=( hello world )
declare -A arr2=( [key1]=hello [key2]=world )
echo ${arr1[0]}
echo ${arr2[key1]}
(4) 取出所有元素
declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}
(5) 数组的长度
declare -a arr=( hello world )
echo "arr length is ${#arr[@]}"
# 需要看总长度的时候使用@ 如果是当个元素长度则使用索引/key
(6) 向数组中添加元素
declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry
(7) 输出索引
declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry
echo "arr indexs is ${!arr[@]}"

6、 Bash 变量的定义与使用

letter_name="abc"
# echo打印,$引用变量
echo $letter_name

7、只读变量

a="123"
readonly a

8、删除变量

unset variable_name
(不能删除只读变量)

9、 控制语句 if

if [ 2==2 ]; then echo "true"; else echo "false" ;fi
# 大于小于需要用两个[],使用单个的话,可以使用 -gt大于,-lt 小于
if [[ 2 > 1 ]]; then echo "true"; else echo "false" ;fi
# 单条件
if [ expression ];
then
statements
fi
# 多条件与
if [ expression_1 ] && [ expression_2 ];
then
statements
fi
# 多条件或
if [ expression_1 ] || [ expression_2 ];
then
statements
fi
# 多分支

if [ expression_1 ] ;
then
statements
elif [ expression_2 ] ;
then
statements
else
statements
fi

10、 循环语句 for

for variable in list
do
commands
done
//或
for (( expression1; expression2; expression3 ))
do
commands
done
# 循环读取文件内容并输出
for i in $(cat test.txt); do echo $i; done

for i in $(cat test.txt); do echo "a"$i; done

11、 for 循环范围

for num in {10..0..1}
do
echo $num
done

12、 for 循环数组

arr=( "Welcome" "to" "hogwarts" )
for i in "${arr[@]}"
do
echo $i
done

13、 表达式 for 循环

for ((i=1; i<=10; i++))
do
echo "$i"
done

14、 while 循环

while [ expression ];
do
commands;
multiple commands;
done
int = 1
while(( $int <= 5))
do
   echo $int
   let "int++"
done

15、 break 与 continue

  • break 语句可以终止 for 循环的重复性任务
  • continue 语句在 for 循环中以特定条件跳过该条件下给定的特定语句

16、 函数

function_name() {
  commands
}

17、 变量的作用域

  • 默认情况下所有变量都定义为全局变量,即使在函数内部声明也是如此。
  • local关键字在函数内部声明局部变量,该变量只能够在该函数内部使用。

18、 返回值

  • Bash 函数中,其返回值是执行的最后一个语句的状态。1-255(十进制)范围内表示失败,除此之外表示成功。
  • 想要从函数中返回任意实际的值,最简单的选择是将函数的执行结果分配给一个全局变量
  • 更好的选择是将值发送到 stdout 再打印输出

19、 参数传递

  • $0 为函数本身
  • $1、2 · · ·n 参数传递的顺序位
  • $#保存传递给函数的函数的位置参数或数量
  • $$当前进程ID号
  • $*或 $@保存传递给参数的所有位置参数或参数
  • $?显示最后一个命令的退出状态,0表示正常,其他表示错误退出