shell中各种括号的用法
2024-09-08 03:50:07
一、单小括号()
1、将某个命令的返回值作为某个变量的值进行传递
#!/bin/bash
USER=$(whoami)
echo $USER [root@jump ~]# for i in $(seq 0 4);do echo $i;done
0
1
2
3
4
2、用于初始化数组
array=(1 2 3 4)
二、双小括号(())
1、整数运算(不支持浮点型)
[root@jump ~]# echo $((1+1))
2
2、进制转换
16进制转10进制
[root@jump ~]# echo $((16#5f))
95
3、重新定义变量的值
[root@jump ~]# for ((i=0;i<5;i++));do echo $i;done
0
1
2
3
4
4、算数比较
[root@jump ~]# i=5;if (($i>1));then echo "yes";fi
yes
三、单中括号[...]
算数比较
[root@jump ~]# i=5;if [ $i -ge 1 ];then echo "yes";fi
yes
四、双中括号[[...]]
支持字符串模式匹配,甚至支持正则表达式;使用[[...]]条件判断,能够防止脚本中的许多逻辑错误,比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错;
[root@jump ~]# if [[ hello==hell? ]];then echo "yes";fi
yes
五、大括号{...}
1、常规用法
for i in {1..4};do echo $i;done #打印1到4的数字;
touch {1..4}.txt #创建1.txt 2.txt 3.txt 4.txt文件
touch {1,4}.txt #创建1.txt 4.txt文件
2、变量替换
2.1、${var:-string}和${var:=string}
如果变量var为空,则将string赋值给${var:-string}和${var:=string};
[root@jump ~]# cat aaa.sh
#!/bin/bash
NUM=$1 if [ ${NUM:="1"} -gt 10 ];then
echo "比10大"
else
echo "比10小"
fi echo "输入值为:"${NUM:-"1"}
[root@jump ~]# bash aaa.sh
比10小
输入值为:1
[root@jump ~]# bash aaa.sh 55
比10大
输入值为:55
2.2、${var:+string}
变量var不为空的时候,才将string赋值给${var:+string};
2.3、${var:?string}
变量为空的时候,则把string输出到标准错误中,并从脚本中退出;
[root@jump ~]# cat str.sh
#!/bin/bash
NUM=$1
if [ ${NUM:?"1"} -gt 10 ];then
echo "比10大"
else
echo "比10小"
fi
[root@jump ~]# bash str.sh
str.sh:行3: NUM: 1
[root@jump ~]# bash str.sh 3
比10小
2.4、模式匹配
# 是去掉左边
% 是去掉右边
#和%中的单一符号是最小匹配,两个相同符号是最大匹配。
[root@jump ~]# var="hello word"
[root@jump ~]# echo $var
hello word
[root@jump ~]# echo ${var%o*d}
hello w
[root@jump ~]# echo ${var%%o*d}
hell
[root@jump ~]# echo ${var#?e}
llo word
[root@jump ~]# echo ${var##?e}
llo word
[root@jump ~]# echo ${var##*e}
llo word
[root@jump ~]# echo ${var##*s}
hello word
[root@jump ~]# echo ${var##*d} [root@jump ~]# echo ${var##*r}
d
[root@jump ~]# echo ${var##hello}
word
以上操作都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。
2.5、字符串的提取和替换
[root@jump ~]# var=/data/nginx
[root@jump ~]# echo $var
/data/nginx
[root@jump ~]# echo ${var:5}
/nginx
[root@jump ~]# echo ${var: -5}
nginx
[root@jump ~]# echo ${var: -6}
/nginx
[root@jump ~]# echo ${var:(-6)}
/nginx
[root@jump ~]# echo ${var:1:4}
data
[root@jump ~]# echo ${var/t/a}
/daaa/nginx
[root@jump ~]# echo ${var/a/o}
/dota/nginx
[root@jump ~]# echo ${var//a/o}
/doto/nginx
最新文章
- Hyper-V 激活Windows系统重启后黑屏的解决方法 + 激活方法
- Sort Colors [LeetCode]
- JAVA 5.17习题
- Asp.Net正在中止线程引发的问题
- Amazon-countDuplicate
- 反编译APK的工具和方法
- ARP协议详解
- C++的函数重载 转
- iOS: 学习笔记, 用代码驱动自动布局实例(swift)
- Copy_on_write的简单实现
- Error:C:\Users\issuser\AndroidStudioProjects\SQLiteDemo1\.gradle\buildOutputCleanup\cache.properties (系统找不到指定的文件。)
- mybatis常用类起别名
- Redis批量导入数据的方法
- Windows下安装单机Kafka
- Android相关 博客收藏
- Tensorflow之Slim使用
- rac添加新节点的步骤与方法
- abap method中的异常处理
- 微信小程序入门与实战
- SQL Timeout超时的处理方法