Bash编程

目录:

  1. bash编程语法
  2. bash脚本编写

1.bash编程语法

Bash 编程基础

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

Bash 变量

语法: Variable_name=value

Bash 变量定义的规则

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

 Bash 数据类型

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

Bash 变量的类型

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

 Bash 变量的定义与使用

letter_name="abc"

echo $letter_name 

 只读变量

a="123"

readonly a

删除变量

unset Variable_name

变量类型 

字符串: your_name="Tom"
拼接字符串: greeting="hello, ${your_name},hello,hello"

数组array name=(value0 value1 value2 value3)

  • 取数组valuen=${array_name[n]}
  • 单独赋值array name[0]=value0

 字符串的拼接

基本语法 str3="${str1}${str2}"

Bash编程_第1张图片 Bash 引号

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

数组

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

数组初始化

  • my_array=(A B "C" D)
  • echo "第一个元素为:${my_array[0]}"

数组单个定义

  • my_array[1]=B
  • echo "数组的元素为: ${my_array[*]}"
  • echo "数组的元素为: ${my_array[@]}" 

索引数组的声明和赋值

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 )

关联数组的声明和赋值

declare -A Array_Name

# 关联数组

Array_Name[name1]=value_1

Array_Name[name2]=value_2

Array_Name=( [name1]=value_1 [name2]=value_2 )

数组的访问 

declare -a arr1=( hello world )

echo ${arr1[0]}

declare -A arr2=( [key1]=hello [key2]=world )

echo ${arr2[key1]}

取出所有元素 

declare -a arr=( hello world )

echo ${arr[@]}

echo ${arr[*]}

数组的长度 

declare -a arr=( hello world )

echo "arr length is ${#arr[@]}"

向数组中添加元素 

declare -a arr=( hello world )

arr+=(Tom)

arr[5]=harry

echo ${arr[*]}

输出索引 

declare -a arr=( hello world )

arr+=(Tom) arr[5]=harry

echo "arr indexs is ${!arr[@]}"

控制语句 if 

# 单条件

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

循环语句 for 

for variable in list

do

commands

done

//或

for (( expression1; expression2; expression3 ))

do

commands

done

for 循环范围 

for num in {10..0..1}

do

echo $num

done

for 循环数组 

arr=( "Welcome" "to" "zhangjiakou" )

for i in "${arr[@]}"

do

echo $i

done

for i in ${arr[@]}

do

echo $i

done

for i in ${arr[*]}

do

echo $i

done

for i in "${arr[*]}"

do

echo $i

done

表达式 for 循环 

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

do

echo "$i"

done

while 循环 

while [ expression ];

do

commands;

multiple commands;

done 

i=1

while(($i<=5))

do
echo $i
let "i++"
done

break 与 continue 

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

函数 

function_name() { commands }

变量的作用域 

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

返回值

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

 参数传递

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

2.bash脚本编写

read命令

  • read命令是用于从终端或者文件中读取输入的内部命令。 
  • 读取整行输入
  • 每行末尾的换行符不被读入

read命令使用

  • 从标准输入读取输入并赋值给变量
    • read var
  • 从标准输入读取多个内容
    • read var1 var2 var3
  • 不指定变量(默认赋值给REPLY)
    • read 

脚本参数传递

  • $0脚本名称
  • $1~$n获取参数
  • $#传递到脚本的参数个数。$$脚本运行的当前进程ID号
  • $*以一个单字符串显示所有向脚本传递的参数
  • $?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 

Bash编程_第2张图片 

算术运算

  • a=10 b=20
  • +        加法`expr $a +$b`结果为30
  • -         减法‘expr $a - $b`结果为-10
  • *         乘法`expr $a \* $b`结果为200
  • /          除法‘expr $b / $a`结果为2 
  • %        取余‘expr $a % $b`结果为10
  • =         赋值 a=$b 将把变量b的值赋给a
  • ==       相等相同则返回true: [ $a == $b ] 返回 false
  • !=        不相等不相同则返回true:[ $a !=$b ]返回true
  • -eq      检测相等[ $a -eq $b ]返回false
  • -ne      检测不相等[ $a -ne $b ]返回true
  • -gt       检测左边是否大于右边「$a -gt $b ]返回false
  • -lt        检测左边是否小于右边[ $a -lt $b ]返回true
  • -ge      检测左边是否大于等于右边[$a -ge $b ]返回false
  • -le       检测左边是否小于等于右边[ $a-le $b ]返回true

 Bash编程_第3张图片

创建目录并生成文件

  • mkdir test
  • cd test
  • echo "hello" > test.txt
  • ls 

Bash编程_第4张图片 

Bash编程:

  1. 使用 bash 实现自动创建目录并生成文件。
  2. 使用 bash 判断目录是否存在。

 Bash编程_第5张图片

 

你可能感兴趣的:(Linux,bash,开发语言)