目录:
bash编程语法
Bash编程基础Bash变量Bash变量定义的规则Bash数据类型Bash变量的类型Bash变量的定义与使用只读变量删除变量变量类型字符串的拼接Bash引号数组索引数组的声明和赋值关联数组的声明和赋值数组的访问取出所有元素数组的长度向数组中添加元素输出索引控制语句if循环语句forfor循环范围for循环数组表达式for循环while循环break与continue函数变量的作用域返回值参数传递bash脚本编写
Bash脚本创建Bash执行Bash单行注释Bash多行注释read命令read命令使用read读取单个和多个变量算术运算关系运算符关系运算符列表Bash算术运算符脚本输出文件Bash与目录操作命令结合Bash与内存操作结合脚本中编写函数脚本参数传递算术运算创建目录并生成文件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 引号
输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别输出一个已定义的变量,则需要使用双引号
数组
数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合
数组初始化
my_array=(A B "C" D)echo "第一个元素为:${my_array[0]}"
数组单个定义
my_array[1]=Becho "数组的元素为: ${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脚本编写
Bash 脚本创建
touch bash_script.shvim或者vi bash_script.sh写入代码
#!/bin/bash
echo "Hello World"
Bash 执行
chmod +x bash_script.sh./bash_script.sh
Bash 单行注释
注释段落的开头使用#
Bash 多行注释
在<< BLOCK和BLOCK之间的内容会被当成注释在: ’’中的内容会被当成注释
read命令
read 命令是用于从终端或者文件中读取输入的内部命令格式 read
-p 命令行选项在同一行上输入-s 静默输入-a 对数组进行多个输入
read命令使用
从标准输入读取输入并赋值给变量
read var从标准输入读取多个内容
read var1 var2 var3不指定变量(默认赋值给REPLY)
read
read 读取单个和多个变量
echo "Enter the your name: "
read user_name
echo "Your name is $user_name"
echo
echo "Enter your age, phone and address: "
read age phone address
echo "your age is:$age, phone is:$phone, address: $address "
算术运算
在 Bash 中支持11种算术运算符。
运算符描述运算示例+加法$((7+2)) ,打印输出 9-减法$((7-2)) ,打印输出 5*乘法$((7*2)) ,打印输出 14/除法$((18/2)) ,打印输出 9**求幂$((10**2)) ,打印输出 100%模$((11%3)) ,打印输出 2+=常量递增变量,结果存储回变量x=7;let”x += 7”;echo $x ,打印输出 9-=常量递减变量,结果存储回变量x=7;let”x -= 2”;echo $x ,打印输出 5*=变量乘以常量,结果存储回变量x=7;let”x *= 2”;echo $x ,打印输出 14/=变量除以常量,结果存储回变量x=18;let”x /= 2”;echo $x ,打印输出 9%=变量除以常量的余数,结果存储回变量x=11;let”x %= 3”;echo $x ,打印输出 2
关系运算符
运算符描述运算示例=赋值a=$b ,把变量b的值赋给a==等于[ $a == $b ] 相等则返回true!=不相等[ $a != $b ]不等则返回true
关系运算符列表
运算符描述运算示例-eq检查两个数字是否相等1 -eq 1 ,返回 true-ne检查两个数字是否不相等1 -ne 2 ,返回 true-gt检查左边数是否大于右边数2 -gt 1 ,返回 true-lt检查左边数是否小于右边数1 -gt 2 ,返回 true-ge检查左边数是否大于等于右边数2 -ge 1 ,返回 true-le检查左边数是否小于等于右边数1 -le 2 ,返回 true
Bash算术运算符
双括号反引号:反引号要与expr(通用表达式求值器)执行算术扩展。let:let "Num3 = $(( Num1 + Num2 ))"
脚本输出文件
touch test.sh
chmod +x test.sh
vim test.sh
#!/bin/bash
echo "Hello World" > test.txt
Bash 与目录操作命令结合
# 创建目录并生成文件
mkdir test
cd test
echo "hello" > test.txt
ls
Bash 与内存操作结合
#!/bin/bash
for i in `ps aux | awk '{print $6}'|grep -v 'RSS'`
do
count=$[ $count+$i ]
done
echo "$count/kb"
~
脚本中编写函数
脚本中编写了函数需要在脚本中调用才会执行函数如果涉及传参需要在调用函数的时候带上参数
脚本参数传递
$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 testcd testecho "hello" > test.txtls
3.Bash编程:
使用 bash 实现自动创建目录并生成文件。使用 bash 判断目录是否存在。
好文阅读
发表评论