shell脚本4
字符串变量
格式介绍:单引号 var='abc'
双引号 var="abc"
不使用引号 var=abc
区别:单引号,原样输出,不会解析里面的变量
双引号,会解析变量,并且可以使用子双引号,需要转义字符 \
不使用引号,会解析变量,但不能含有空格,空格后的字符串会作为命令去执行
获取字符串长度: ${#var_name}
拼接
无符号拼接 var3=${var1}${var2}
双引号拼接 var3="${var1} ${var2}"
混合拼接 var3=${var1}"&"${var2}
字符串截取
${变量名:start:length} | 从字符串的左边第 start 个字符开始, 向右截取 length 个字符。 从0开始数 |
${变量名:start} | 从字符串的左边第 start 个字符开始截取,直到最后。 |
${变量名:0-start:length} | 从字符串的右边第 start 个字符开始, 向右截取 length 个字符。 从1开始数 |
${变量名:0-start} | 从字符串的右边第 start 个字符开始截取,直到最后。 |
${变量名#*chars} | 从字符串第一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名##*chars} | 从字符串最后一次出现 *chars 的位置开始, 截取 *chars 右边的所有字符。 |
${变量名%chars*} | 从字符串最后第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符。 |
${变量名%%chars*} | 从字符串第一次出现 chars* 的位置开始, 截取 chars* 左边的所有字符 |
数组
定义shell数组
array_name=( item1 item2 ...)
array_name=( [索引1]=item1 [索引2]=item2 ... )
获取shell数组数据
${ array_name[索引] } 获取某元素
${ array_name[*] } 获取数组全部元素
${ array_name[@] } 获取数组全部元素
数组拼接
array_name=( ${ array_name1[*] } ${ array_name2[*] } ... )
数组删除
unset array_name[索引] 删除数组某元素
unset array_name 删除数组
shell内置命令
shell内部提供的命令,可直接使用
内置命令 与 外部脚本文件 执行区别
内置文件:执行速度快,内置命令执行是当前shell环境的一部分,
在当前进程内执行,无需上下文切换
外部脚本文件:执行速度慢,需要磁盘IO操作,并且开启一个新的进程运行脚本文件,
导致进程之间上下文的切换
alias内置命令 设置别名 给命令设置别名
定义 alias 别名="命令"
删除指定别名 unalias 别名
删除当前shell环境中所有别名 unalias -a
以上两种都是临时删除,永久删除需要去配置文件手动删除
echo内置命令 在终端输出字符串,默认加上换行符
echo 字符串 默认输出换行
echo -n 字符串 -n输出不换行
echo -e "字符串中含有转义字符" -e解析转义字符
如 echo -e "hello \nworld" \n换行符
echo -e "hello world\c" \c清除echo结尾的换行
read内置命令 用于读取标准输入(终端控制台用户输入的数据)
#read 给多个变量赋值
#!/bin/bash
# 使用read命令读取数据 -p 提示信息 将数据赋值给多个变量
read -p "请输入姓名,年龄,爱好:" name age hobby
# 打印每一个变量的值
echo "姓名:${name}"
echo "年龄:${age}"
echo "爱好:${hobby}"#read 读取一个字符
#!/bin/bash
# 使用read命令读取数据 -p 提示信息 -n 1 设置读取一个字符
read -n 1 -p "您确定要删除吗(请输入y/n):" char
# 打印输出这个字符
printf "\n" # 输出换行 也可以使用echo代替
echo "您输入的字符:${char}"#read 限制时间输入
#!/bin/bash
# 使用read命令读取数据 提示信息-p 设置限制时间(20秒内)-t 20 静默状态看不见密码-sp
read -t 20 -sp "请输入密码(20秒内):" pwd1
# 输出一个换行
echo
# 使用read命令读取数据 提示信息-p 设置限制时间(20秒内)-t 20 静默状态看不见密码-sp
read -t 20 -sp "请再次输入密码(20秒内):" pwd2
# 输出一个换行
printf "\n"
# 校验两次密码是否一致
if [ $pwd1 == $pwd2 ]
then
echo "密码一致,通过"
else
echo "密码不一致,失败"
fi
exit内置命令 退出当前Shell进程结束运行,返回一个退出状态码;
使用$?可以接收这个状态码
1、结束当前shell进程
2、可以返回不同的状态码,用于处理不同的业务
declare内置命令
1、设置变量的属性
declare [+/-][aArxif][变量名称=设置值]
+/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
a 设置为普通索引数组
A 设置为key-value关联数组
r 将变量设置为只读, 也可以使用readonly
x 设置变量成为环境变量,也可以使用export
i 设置为整型变量。
f 设置为一个函数变量
2、查看全部shell变量与函数
declare
declare -f 查询所有函数的定义
declare -F 查询所有函数的名称列表
3、实现关联数组变量
#!/bin/bash
#创建索引数组
echo "创建索引数组"
declare -a array1=( 100 abc "itheima" )
#获取索引数组数据
echo "获取array1数组第3个元素:${array1[2]}"
echo "打印array1数组所有元素:${array1[*]}"
echo
#创建关联数组
echo "创建关联数组"
declare -A array2=( ["one"]=100 ["two"]=abc ["itcast"]="itheima" )
#获取索引数组数据
echo "获取array2数组key=itcast元素:${array2["itcast"]}"
echo "打印array2数组所有元素:${array2[@]}"