shell基础操作
一、字符串
字符串是shell编程中最常用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
name='xiaoxi'
单引号的限制:
-
单引号里的任何字符都会原样输出,单引号中的变量是无效的。
-
单引号字串中不能出现单引号(对单引号使用转义符也不行)。
双引号
name="xiaoxi"
uname="${name}\"test"
双引号的优点:
-
双引号里可以包含变量
-
双引号里可以出现转义字符
不加引号
name=xiaoxi
uname=${name}\"test
不加引号和双引号效果类似,只是开头和结尾没有双引号。
拼接字符串
name='xiaoxi'
uname="${name}test"
uname2="$name$uname"
echo $name $uname $uname2
输出:
[root@xiaoxitest ~]# ./test.sh
xiaoxi xiaoxitest xiaoxixiaoxitest
获取字符串长度
name='xiaoxi'
echo ${#name}
输出:
[root@xiaoxitest ~]# ./test.sh
6
提取字符串
name='xiaoxitest'
echo ${name:0:6}
输出:
[root@xiaoxitest ~]# ./test.sh
xiaoxi
查找字符串
name='xiaoxitest'
echo `expr index ${name} xiaoxi`
输出:
[root@xiaoxitest ~]# ./test.sh
1 #1表示存在,0表示不存在
二、转义字符
name='xiaoxitest'
echo -e "xiaoxi\ntest"
输出:
[root@xiaoxitest ~]# ./test.sh
xiaoxi
test
这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出:
xiaoxi\ntest
其它转义字符也可以用于echo中:
三、表达式
将命令结果存储在变量中
name=`who | awk {'print $1'}` #注意是反引号,位于Esc键下方
count=$(who | wc -l)
echo -e "The user login count: ${count}\n${name}"
输出:
[root@xiaoxitest ~]# ./test.sh
The user login count: 2
root
xyp
四、数组定义
bash仅支持一维数组,并且没有限制数组的大小。用括号表示数组,数组元素用“空格”符号或换行分隔。
例1:
name=(aa bb cc)
例2:
name=(
aa
bb
cc
)
也可单独定义数组的各个元素
name[0]=aa
name[1]=bb
name[3]=cc
五、数组读写
例:
#!/bin/bash
sar=(aa bb cc) echo sar:${sar[*]} name[0]=aa name[1]=bb name[3]=cc uname=(${name[1]} dd) echo "name:${name[1]} uname:${uname[*]}"
输出:
[root@xiaoxitest ~]# ./test.sh
sar:aa bb cc
name:bb uname:bb dd
使用@ 或 * 可以获取数组中的所有元素,例如:
${name[*]}
${name[@]}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架