Shell里面括号的用法

中括号

中括号分为单中括号[],和双中括号[[]],中括号一般用于表达式判断中,小括号也可以用于表达式,这个后面提到。

单中括号[]

A=5
B=3
[ $A -eq $B ]    判断A是否等于B
[ ${A} -eq ${B} ]  作用同上
[ "${A}" -eq "${B}" ]  作用同上
A=ABC
[ $A == "ABC" ]   或写成  [ ${A} == "ABC" ]   或写成  [ "${A}" == "ABC" ]
[ $A \> "ABC" ]
[ -d ./aaa.sh -a -e ./bbb ]  测试aaa.sh是否为目录并且bbb是否存在,如果都符合则返回真
[ -d ./aaa.sh -o -e ./bbb ]  测试aaa.sh是否为目录并且bbb是否存在,满足一个条件则返回真

我们通过上面可以看出使用单中括号的一些规则:

  • 变量与中括号之间要有空格
  • 变量与操作符之间也要有空格
  • 变量可以直接用$进行引用,也可以使用${}以及"${}"进行引用,虽然可以直接使用${},但是建议还是用"${}",或者直接用$,来引用变量
  • 字符串要用双引号引起来
  • 字符串比较一般使用==来做字符串是否相同测试,使用<或者>进行大小比较,在单中括号中对字符进行大于和小于的比较要用转移\>和\<。比较原理就是对比ASCII进行对比。
  • 另外在单中括号中还可以使用-a和-o这样的逻辑运算符

双中括号[[]]:

A=5
B=3
[[ $A -eq $B ]]    判断A是否等于B
[[ ${A} -eq ${B} ]]  作用同上
[[ "${A}" -eq "${B}" ]]  作用同上
A=ABC
[[ $A == "ABC" ]]   或写成  [[ ${A} == "ABC" ]]   或写成  [[ "${A}" == "ABC" ]] 或写成 [[ $A == ABC ]]
[[ $A > "ABC" ]]
[[ -d ./aaa.sh && -e ./bbb ]]  测试aaa.sh是否为目录并且bbb是否存在,如果都符合则返回真
[[ -d ./aaa.sh || -e ./bbb ]]  测试aaa.sh是否为目录并且bbb是否存在,满足一个条件则返回真
A=ABC
[[ $A =~ "A" ]]   做模式匹配,这个表达式为真
或写成  [[ ${A} =~ "A" ]]  或写成  [[ "$[A]" =~ "A" ]]
[[ $A = A* ]] 表达式为真  [[ $A = B* ]] 表达式为假
  • 双中括号的使用和单中括号的使用规则类似
  • 双中括号中间字符串的大于小于比较不需要转义,且字符串可以不用双引号引用
  • 双中括号里面可以使用&&、||做逻辑运算符
  • 双中括号里面还可以做模糊匹配,使用=~表达式2可以是正则表达式
[ 表达式1 -a 表达式2 ] 等效于 [[ 表达式1 && 表达式2 ]] 等效于 [ 表达式1 ] && [ 表达式2 ] 等效于 [[ 表达式1 ]] && [[ 表达式2 ]]
[ 表达式1 -o 表达式2 ] 等效于 [[ 表达式1 || 表达式2 ]] 等效于 [ 表达式1 ] || [ 表达式2 ] 等效于 [[ 表达式1 ]] || [[ 表达式2 ]]

小括号

单小括号

单小括号单独使用是表示指令组,会通过子shell的方式依次执行括号中的命令

(ls ./;echo "hello";mkdir -p /tmp/ccc)

最常见的用法这是命令替换中使用,命令替换也可以使用反引号``

echo "当前目录是:$(pwd)"
echo "当前目录是:`pwd`"

双小括号

常用在算术运算上以及在for循环中也会用到

A=$((5+3))
B=$(($A+4))

For语句的形式

1到10循环执行

写法1:
for I in (1..10);do
done

写法2:
for I in seq 1 10;do
done

写法3:
for (( i=1 ; i<=10 ; i++ )); do
done

While语句的形式

1到10循环

I=1
while [ $I -le 10 ];do
  let I++
done
时间: 2024-11-06 13:28:03

Shell里面括号的用法的相关文章

Shell中小括号的用法

小括号(): 1.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. 2.得到命令输出--a=$(command), 等同于a=$`command`,得到命令输出传递给变量a 3.初始化数组--array=(a b c d),中间全部以空格为分隔符,很类似于数组. 第一条用法: 错误理解用法示例: 注意:想着括号可以执行多个命令,尝试()多个命令之间空格,加单引号等都没能成

shell中括号的特殊用法

shell中括号的特殊用法 Shell中的括号有其特殊的用法, 现总结如下:1. 符号$后的括号${a} 变量a的值, 在不引起歧义的情况下可以省略大括号.$(cmd) 命令替换, 结果为shell命令cmd的输出, 和`cmd`效果相同, 不过某些Shell版本不支持$()形式的命令替换, 如tcsh.$((exp)) 和`expr exp`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算. a=1;b=2echo $[

SHELL STUDY....tr的用法

一般我们使用tr来做字符串的替换,或者删除指定的字符串 tr的语法如下: tr [OPTION]... SET1 [SET2] -c, -C, --complement first complement SET1 将非SET1中的字符替换为SET2 [[email protected] ~]$ echo "lubinsu" | tr -c "l" "A" lAAAAAAA -d, --delete delete characters in SET

20140527-ASP.NET中尖括号百分号用法

1.<%=%> 里面放的变量名,如:<div><h1>Hello World</h1><p>Welcome to Beginning ASP.NET 3.5 on <%=DateTime.Now.ToString() %></p></div>输出结果为:Hello WorldWelcome to Beginning ASP.NET 3.5 on 2009-11-10 15:53:08 2. <%#%>

shell变量的特殊用法

转载:http://blog.csdn.net/shmilyringpull/article/details/7631106 假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt${file#*.}:删掉第一个 .  及其左边的字符

linux shell &ldquo;(())&rdquo; 双括号运算符使用

linux shell "(())" 双括号运算符使用 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构语句,就是对shell中算数及赋值运算的扩展.   使用方法: 语法: ((表达式1,表达式2-)) 特点: 1.在双括号结构中,所有表

shell expect的简单用法【转】

用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ##############################################  #!/usr/bin/expect  set timeout 30  spawn ssh -l username 192.168.1.1  expect "password:"  send "ispa

&nbsp; shell中的select用法

select也是循环的一种,它比较适合用在用户选择的情况下.比如,我们有一个这样的需求,运行脚本后,让用户去选择数字,选择1,会运行w命令,选择2运行top命令,选择3运行free命令,选择4退出.脚本这样实现: #!/bin/bash echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit" echo select command in w top free quit do case $comma

(转)Shell中read的用法详解

Shell中read的用法详解 原文:http://blog.csdn.net/jerry_1126/article/details/77406500 read的常用用法如下: read -[pstnd] var1 var2 ... -p 提示语句-n 字符个数-s 屏蔽回显-t 等待时间-d 输入分界 [plain] view plain copy 01). read                           # 从标准输入读取一行并赋值给特定变量REPLY [email prote