Python 测开27期 - julia - 学习笔记 - bash

bash 和shell的关系

bash是shell的一种,bash是Linux系统默认使用的shell。shell就是一个命令行解释器,用户想要以不同的方式与Linux内核交互,就可以采用不同的shell,例如除bash外还有zsh、csh等等。

变量

定义变量规则:

  • 命名只能使用英文字母,数字和下划线,首个字母不能以数字开头
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用bash例的关键字(可以用help命令查看保留关键字)

基本操作

  • 定义一个只读变量a
a="123
readonly a
  • 打印变量
    echo $a
  • 删除变量
    unset a
  • 字符串的拼接
    基本语法 str3="${str1}${str2}

引号

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
    双引号的优点:

  • 双引号里可以有变量

  • 双引号里可以出现转义字符

数组

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

索引数组的声明和赋值

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 )
declare -A arr2=( [key1]=hello [key2]=world )
echo ${arr1[0]}
echo ${arr2[key1]}

取出所有元素

declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}
# * 与 @ 的差别在for中讲解

数组的长度

declare -a arr=( hello world )
echo "arr length is ${#arr[@]}"
# 需要看总长度的时候使用@ 如果是当个元素长度则使用索引/key

向数组中添加元素

declare -a arr=( hello world )
arr+=(hogwarts)
arr[5]=harry

输出索引

declare -a arr=( hello world )
arr+=(hogwarts)
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
printf $num,
done
# 闭区间[10,0 ]
# 输出 10,9,8,7,6,5,4,3,2,1,0,

for 循环数组

# @ 与 * 的区别
arr=( "Welcome" "to" "hogwarts" )
for i in "${arr[@]}"
do
echo $i
done
# 输出: 
# Welcome
# to
# hogwarts

for i in ${arr[@]}
do
echo $i
done
# 输出: 
# Welcome
# to
# hogwarts

for i in ${arr[*]}
do
echo $i
done
# 输出: 
# Welcome
# to
# hogwarts

for i in "${arr[*]}"
do
echo $i
done
# 输出: 
# Welcome to hogwarts

表达式 for 循环

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

while 循环

while [ expression ];
do
commands;
multiple commands;
done

break 与 continue

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

函数

function_name() {
  commands
}

变量的作用域

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

返回值

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

参数传递

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