linux中括号的作用

更新时间:2023-06-19 10:47:22 阅读: 评论:0

linux中括号的作⽤
linux中的各种括号的作⽤
linux中的(),(()),[],[[]],{}的作⽤
()命令组.在括号中的命令列表, 将会作为⼀个⼦shell来运⾏.
在括号中的变量,由于是在⼦shell中,所以对于脚本剩下的部分是不可⽤的. ⽗进程, 也就是脚本本⾝, 将不能够读取在⼦进程中创建的变量, 也就是在⼦shell中创建的变量.
(cmd1;cmd2;cmd3)
初始化数组.
Array=(element1 element2 element3)
$(…)相当于...命令,返回括号中命令执⾏的结果
let命令
(( )):(( … ))结构可以⽤来计算并测试算术表达式的结果. 退出状态将会与[ … ]结构完全相反!还可应⽤到c风格的for,while循环语句,(( ))中,所有的变量(加不加$⽆所谓)都是数值。
’(当然也可以)
for((…;…;…))
do
cmd
done
while ((…))
do
cmd
done
⽐较操作符
< ⼩于
((“b”))
血浴羊山<= ⼩于等于
((“b”))
⼤于
梦见家里来客人
((“b”))
=⼤于等于
((“b”))
(( 0 ))
echo “Exit status of \”(( 0 ))\” is ?.” # 0删除分隔符
(( 5 > 4 )) # 真
echo “Exit status of \”(( 5 > 4 ))\” is $?.” # 0
(( 5 > 9 )) # 假
echo “Exit status of \”(( 5 > 9 ))\” is $?.” # 1
(( 5 - 5 )) # 0
echo “Exit status of \”(( 5 - 5 ))\” is $?.” # 1
(( 5 / 4 )) # 除法也可以.
echo “Exit status of \”(( 5 / 4 ))\” is $?.” # 0
(( 1 / 2 )) # 除法的计算结果 < 1.
echo “Exit status of \”(( 1 / 2 ))\” is $?.” # 截取之后的结果为 0.
# 1
(( 1 / 0 )) 2>/dev/null # 除数为0, ⾮法计算.
echo “Exit status of \”(( 1 / 0 ))\” is $?.” # 1
for ((a=1; a <= LIMIT ; a++)) # 双圆括号, 并且”LIMIT”变量前⾯没有”a ”
done
while (( a <= LIMIT )) # 双圆括号, 变量前边没有”a ”
((a += 1)) # let “a+=1”
done
a=2
b=a*4)) #a=2 b=8
c=$((a*3)) #a=2 c=6
[ ]
条件测试表达式放在[ ]中. 值得注意的是[是shell内建test命令的⼀部分, 并不是/usr/bin/test中的外部命令的⼀个链接.
⽂件测试操作符(如果下⾯的条件成⽴将会返回真)
-e ⽂件存在(推荐⽤)
-a ⽂件存在(不推荐⽤)
-f 表⽰这个⽂件是⼀个⼀般⽂件(并不是⽬录或者设备⽂件)
-s ⽂件⼤⼩不为零
-d表⽰这是⼀个⽬录
-b表⽰这是⼀个块设备(软盘, 光驱, 等等.)
-c表⽰这是⼀个字符设备(键盘, modem, 声卡, 等等.)
-p这个⽂件是⼀个管道
-h这是⼀个符号链接
-L这是⼀个符号链接
-
S表⽰这是⼀个socket
-t⽂件(描述符)被关联到⼀个终端设备上
这个测试选项⼀般被⽤来检测脚本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否来⾃于⼀个终端.
-r ⽂件是否具有可读权限(指的是正在运⾏这个测试命令的⽤户是否具有读权限)
-w⽂件是否具有可写权限(指的是正在运⾏这个测试命令的⽤户是否具有写权限)
-x⽂件是否具有可执⾏权限(指的是正在运⾏这个测试命令的⽤户是否具有可执⾏权限)五彩世界
-g t-group-id(sgid)标记被设置到⽂件或⽬录上
如果⽬录具有sgid标记的话, 那么在这个⽬录下所创建的⽂件将属于拥有这个⽬录的⽤户组, ⽽不必是创建这个⽂件的⽤户组. 这个特性对于在⼀个⼯作组中共享⽬录⾮常有⽤.
-u t-ur-id (suid)标记被设置到⽂件上;
如果⼀个root⽤户所拥有的⼆进制设可执⾏⽂件置了t-r-iud标记位的话, 那么普通⽤户也会以root权限来运⾏这个⽂件. [1] 这对于需要访问系统硬件的执⾏程序(⽐如pppd和cdrecord)⾮常有⽤. 如果没
有suid标志的话, 这些⼆进制执⾏程序是不能够被⾮root⽤户调⽤的.
-rwsr-xr-t 1 root 178236 Oct 2 2000 /usr/sbin/pppd
对于设置了suid标志的⽂件, 在它的权限列中将会以s表⽰.
-k设置粘贴位
对于”粘贴位”的⼀般了解, save-text-mode标志是⼀个⽂件权限的特殊类型. 如果⽂件设置了这个标志, 那么这个⽂件将会被保存到缓存中, 这样可以提⾼访问速度. [2] 粘贴位如果设置在⽬录中, 那么它将限制写权限. 对于设置了粘贴位的⽂件或⽬录, 在它们的权限标记列中将会显⽰t.
drwxrwxrwt 7 root 1024 May 19 21:26 tmp/
如果⽤户并不拥有这个设置了粘贴位的⽬录, 但是他在这个⽬录下具有写权限, 那么这个⽤户只能在这个⽬录下删除⾃⼰所拥有的⽂件. 这将有效的防⽌⽤户在⼀个公共⽬录中不慎覆盖或者删除别⼈的⽂件. ⽐如说/tmp⽬录. (当然, ⽬录的所有者或者root⽤户可以随意删除或重命名其中的⽂件.)
-O判断你是否是⽂件的拥有者
-G⽂件的group-id是否与你的相同
-N从⽂件上⼀次被读取到现在为⽌, ⽂件是否被修改过
f1 -nt f2⽂件f1⽐⽂件f2新
f1 -ot f2⽂件f1⽐⽂件f2旧
f1 -ef f2⽂件f1和⽂件f2是相同⽂件的硬链接
五年级词语! “⾮” – 反转上边所有测试的结果(如果没给出条件, 那么返回真).
⽐较操作符
整数⽐较
-eq 等于
-ne不等于
-gt⼤于
-ge⼤于等于
-
lt⼩于
-le⼩于等于
字符串⽐较
= 等于
==等于,与=等价.(==⽐较操作符在双中括号对和单中括号对中的⾏为是不同的)
[[ a以”z”开头(模式匹配)那么结果将为真
[[ a与z*相等(就是字⾯意思完全⼀样), 那么结果为真.
[ a" == "z*" ] # 如果$a与z*相等(就是字⾯意思完全⼀样), 那么结果为真.
!= 不等号(这个操作符将在[[ … ]]结构中使⽤模式匹配)
< ⼩于, 按照ASCII字符进⾏排序(注意”<”使⽤在[ ]结构中的时候需要被转义)
⼤于, 按照ASCII字符进⾏排序(注意”>”使⽤在[ ]结构中的时候需要被转义)
农历鬼节
-
z 字符串为”null”, 意思就是字符串长度为零
-n 字符串不为”null”.
兴致勃勃的意思-a逻辑与
平凡是福-o逻辑或
{xxx,yyy,zzz,…}
⼤括号扩展.
echo {1..20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
cat {file1,file2,file3} > combined_file
把file1, file2, file3连接在⼀起, 并且重定向到combined_file中. cp file22.{txt,backup}
拷贝””到”file22.backup”中
在⼤括号中, 不允许有空⽩, 除⾮这个空⽩被引⽤或转义.
echo {file1,file2}\ :{\ A,” B”,’ C’}
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
代码块
这个结构事实上创建了⼀个匿名函数(⼀个没有名字的函数). 然⽽, 与”标准”函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说还是可见的(除了⽤declare,typet命令声明的变量)
()会开启⼀个新的⼦shell,{}不会开启⼀个新的⼦shell
(())常⽤于算术运算⽐较,[[]]常⽤于字符串的⽐较.
(())返回的结果是括号中表达式值
{var}
var
{var-default}
如果var未t,那么就是⽤default.两者之间不同只有当var为空变量时,前者为default,后者为空.
{var=default}
如果var未t,那么就设置default.两者之间不同只有当var为空变量时,前者设置为default,后者设置为空.
{var+default}
如果var被t,就是⽤default.未t,就使⽤null字符串.两者之间不同只有当var为空变量时,前者为null字符串,后者为default.
上⾯三种参数替换中,第⼆种使⽤后变量的值被改变.
参数替换扩展
{#array}
字符串长度或数组第⼀个元素的字符串长度
例外:
{#@}指位置参数的个数.
[#array[@]}指数组元素的个数
{var##pattern}
从var开头删除最近或最远匹配pattern的⼦串.
{var%%pattern}
从var结尾删除最近或最远匹配pattern的⼦串.
{var:pos:len}
从位置pos开始,并扩展len长度个字符
{var//pattern/replacement}
使⽤replacement来替换var中的第⼀个或所有pattern的匹配.
{var/%pattern/replacement}
如果var的后缀匹配到了pattern,那么就⽤replace ment来替换pattern.
{!varprefix@}
前边所有声明过的,以varprefix为前缀的变量名.
[[]]就是条件表达式,在bash中,字符串⽐较⽤ > < != == <= >=
只是在[]中 < >需要转义;对于数值⽐较.⽤ -lt -le -eq -ge -gt 来⽐较,与[[]]中表达不太⼀样,
在[ ] 中的 < > 需要⽤转义 \< >,如果有多个表达式,在[[ ]] 中⽤ && || 来组合,⽽[] 中是⽤ -a -o 来组合

本文发布于:2023-06-19 10:47:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1045470.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:变量   命令   删除
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图