当前位置: 首页 > news >正文

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[@]}"
 

http://www.lryc.cn/news/64954.html

相关文章:

  • 递归思路讲解
  • 基于R语言APSIM模型高级应用及批量模拟
  • Hyperf中的其它事项
  • 【技术选型】Elasticsearch 和Solr那个香?
  • 4面美团测试工程师,因为这个小细节,直接让我前功尽弃.....
  • 数据恢复软件EasyRecovery16下载安装步骤教程
  • Springboot 自定义缓存配置 CacheManager 及redis集成
  • JS 中七个改变原数组的方法
  • 【笔试强训选择题】Day7.习题(错题)解析
  • Vue电商项目--axios二次封装
  • 人生四维度
  • Python 调用 MessageBeep 播放系统音效
  • 废物,我TMD一个985却斗不过专科生(大厂自动化测试2年被裁)
  • p70 内网安全-域横向内网漫游 Socks 代理隧道技术(NPS、FRP、CFS 三层内网漫游)
  • 第三十二章 Unity Mecanim动画系统(上)
  • 第二章 集合
  • 这一篇Databinding应该可以帮助迅速上手吧
  • 【PHP在线定制商城网站源码V3.0】开源的DIY在线定制商城系统+在线礼品定制
  • cout源码浅析
  • 发送Ajax get请求详解
  • SQL语句
  • Mysql 学习(八)单表查询方法二
  • 安卓系统下的截屏和录屏
  • 行为型模式-中介者模式
  • 辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-功能ODD定义
  • PMP/高项 06-项目成本管理
  • XXL-JOB中间件【实现分布式任务调度】
  • Vue3+Element Plus环境搭建和一键切换明暗主题的配置
  • Leetcode326. 3 的幂
  • 【运动规划算法项目实战】如何在栅格地图中实现Dijkstra算法