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_namen}
  • 单独赋值array name0=value0

字符串的拼接

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

Bash 引号

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

数组

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

数组初始化

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

数组单个定义

  • my_array1=B
  • echo "数组的元素为: ${my_array\*}"
  • echo "数组的元素为: ${my_array@}"

索引数组的声明和赋值

declare -a Array_Name

索引数组

Array_Nameindex_1=value_1

Array_Nameindex_2=value_2

Array_Name=( index_1=value_1 index_2=value_2 )

关联数组的声明和赋值

declare -A Array_Name

关联数组

Array_Namename1=value_1

Array_Namename2=value_2

Array_Name=( name1=value_1 name2=value_2 )

数组的访问

declare -a arr1=( hello world )

echo ${arr10}

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

echo ${arr2key1}

取出所有元素

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)

arr5=harry

echo ${arr\*}

输出索引

declare -a arr=( hello world )

arr+=(Tom) arr5=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表示没有错误,其他任何值表明有错误

算术运算

  • 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

创建目录并生成文件

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

Bash编程:

  1. 使用 bash 实现自动创建目录并生成文件。
  2. 使用 bash 判断目录是否存在。
相关推荐
LDR00611 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术11 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园11 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob11 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享11 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.11 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..11 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽11 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下11 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗11111 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言