目录
shell循环语句
echo命令
选项:
-e 表示输出反斜杠转义符
-n 表示不换行输出
\n 输出换行
\t 横向制表符
\b 表示退格不显示前一个字符
\c 抑制更多的输出或不换行
例:
分区
循环的含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
循环次数事先已知
循环次数事先未知
常见的循环的命令:for, while, until
for循环语句
用法:
读取不同的变量值,用来逐个执行同一组命令
for循环经常使用在已经知道要进行多少次循环的场景
格式:
for 变量名 in 取值列表
do
命令序列
done
例:
用for循环打印三角形
用for循环打印矩形
用for循环打印九九乘法表
用for循环求和
用for批量创建用户
用for循环测试主机在不在线
while循环语句结构(迭代)
用法:
重复测试某个条件,只要条件成立则反复执行
常在不知道范围的时候成立
格式:
while 条件测试操作
do
命令序列
done
例:猜商品价格
例:
批量创建用户并修改密码
until 循环语句结构
用法: 重复测试某个条件,只要条件不成立则反复执行
格式:
until 条件测试操作
do
命令序列
done
例:
0-100的奇数和
0-100的偶数和
Shell函数
将一些会经常使用的脚本定义成函数
将命令序列按格式写在一起
可方便重复使用命令序列
Shell函数定义
[function] 函数名(){
命令序列
[return x]
}
函数名() {
}
例:
函数和调用函数
函数的返回值
获取函数的返回值2种
1.return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
退出码必须是0-255,超出的值将为除以256取余
2.在函数体中用echo输出,并在函数体外使用变量赋值后,可再进一步对函数的返回值操作
函数的传参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
函数变量的作用范围
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
例 1
例 2
函数的递归
fact函数调用函数自己本身
格式:
fact (){
}
fact
例:
数组
shell数组的定义
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开
在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
定义属组的方法
方法一:数组名=(value1 value2 valuen3...)
方法二:数组名=([0]=value0 [1]=value0 [2]=value0 ...)
方法三:
数组名[0]="value"
数组名[1]="value"
数组名[2]="value
数组的数据类型
数值类型
字符类型:使用" "或’ '定义
"a b c d" #字符串
"a" "b" "c" "d" #列表
("a" "b" "c" "d") #数组
获取数组的数据列表
echo ${数组名[*]}
echo ${数组名[@]}
例:
获取数组长度
echo ${#数组名[*]}
echo ${#数组名[@]}
例:
获取数组下标对应的值
数组名=(元素0 元素1 元素2 ……) 定义数组
echo ${数组名[索引值]} 输出数组索引值对应的元素,索引值为从0开始
例:
数组切片(数组下标从0开始,不包括后面的下标数)
数组的替换(根据下标来操作)
${数组名[0]/旧字符/新字符}
#会替换所有元素上能匹配到的字符,但是这是临时替换不会影响原有数组,可通过重新赋值实现替换原有数组
数组删除和指定下标的值删除
unset数组名[n] #删除某一个元素
unset数组名[*]或unset数组名[@] #删除整个数组
数组追加元素
数组名+=(变量1 变量2 ...)
使用下标追加元素:数组名【下标】=变量
数组名[数组长度]=元素值
冒泡排序
#/bin/bash
score=(55 23 45 32)
for((i=1;i<{$#score[*]};i++))#${#score[*]}为数组的元素的个数
do
for((j=0;j<${#score[*]}-$i;j++))#${#score[*]}为数组的元素的个数
do
if[ ${score[$j]} -gt ${score[((j-1))]} ]
then
temp=${score[j+1]}
scorel[((j+1))]=${score[$j]}
score[$j]=$temp
fi
done
done
echo ${score[*]}
[root@localhost opt]# sh maopao.sh
23 32 45 55