shell编程中的单/双 小括号, 中括号, 大括号
linux shell中的变量类型?分字符串或者数字或者bool类型吗? 参考: http://www.cnblogs.com/nufangrensheng/p/3477281.html
不分!
shell编程中 不分数据类型, 所有的变量都 是字符串. 要进行 数值 / 数字的 整数运算, 就要用let, expr, (( ))等方式进行!
另外, shell中 只能处理整数, 不能处理 浮点数. 要用浮点运算, 需要用bc 程序

双小括号的使用
[foo@localhost ~]$ myfunc () {
> local i=0
> (( i++ ))
> echo $i
> }
[foo@localhost ~]$ myfunc
1
[foo@localhost ~]$ myfunc () { local i=0; (( ++i )); echo $i; }
[foo@localhost ~]$ myfunc
1
[foo@localhost ~]$ myfunc () { local i=0; (( --i )); echo $i; }
[foo@localhost ~]$ myfunc
-1
[foo@localhost ~]$ myfunc () { local i=0; ((--i)); echo $i; }
[foo@localhost ~]$ myfunc
-1
[foo@localhost ~]$
miscellaneous杂项
$! 和!$的区别, 只要搞清楚, 以$开头的表示 是变量, 是特殊变量, 而以! 开头的是 "历史命令 designator指示器" 就能够分清楚了,所以$! 是 显示 上一次"后台运行的"命令的pid进程id,注意是后台运行的进程id, 如果不是后台运行的,则是当前shell进程中执行命令, 所以
echo $!就是显示为空的. 那么用 echo $$ 就可以显示当前进程的pid:

而!$ 则是表示上一次命令的参数.print和 printf的区别?
shell中没有print这个命令!
只有printf这个命令,格式是:printf <format> [args], 格式中 \n是换行, 默认的printf是不换行的. %s是输出字符串. %d其实也没有用.

let是返回 被赋值的 变量的内容, 如果没有变量被赋值, 则返回的是 多个表达式中, 最后一个表达式的值. 而expr才是返回 表达式的值.
定义函数/ 执行多个命令序列的时候, 如果写在 同一行中, 一定要 在每条命令的最后 加上 分号, 否则会出错.
eval命令?
eval主要是用在"复杂变量" "间接引用变量"的解析上, 会对命令行进行 两次扫描, "两次解析", 第一次进行变量的值替换, 第二次是对替换后的 内容进行解析"执行", 如果替换后的内容,是可以执行的命令, 则执行该命令; 如果是可以显示的变量, 则输出该变量的值.
eval后要不要 echo?
注意, 如果是替换后的"字符串内容"是可以执行的命令, 则不要echo, 否则还是显示字符串, 而不是执行命令
如果替换后的内容是 变量, 通常是: "$$x", 前一个$是转义表示本义的$, 后面的$x则是要替换的变量. 这时则要用 echo.


#!/bin/bash要加空格吗?
在.sh脚本中, 第一行是 #!/bin/bash. 通常在#! 和/bin/bash之间不要加空格. 你所看到的基本都没有的.虽然加上空格也没有什么区别, 但是显得不正规.
在双引号(( i=0; i<$j; i++ )) 中, 最后一个语句 i++ 一定不能加 分号, 否则会报错, 而其中的变量引用 $j可以 可以不加$. 但是 i<$j中, i不能加$, 否则会出错
下面是一个打印三角形的小片段:
#!/bin/bash
# print reverse triangle stars
read -p 'enter star lines: ' line
for (( i=1; i<$line; i++ )) //i++ 后面不能加分号, 否则会出错, 里面的$line,$可以省略; i=1, 这里i要从1 开始, 以免在下面打印星号的时候, 第一行会打印出空行
do
# print spances before stars
for (( nspace=line-i; nspace>0; nspace-- ))
do
echo -n ' '
done
# print stars
for (( j=2*i-1; j>0; j-- ))
do
echo -n '*'
done
echo // 这里的echo是为了换行
done

注意, 在C 语言中, 每个语句后面都要加分号, 必须的! 但是, shell语句, 如果单独一行的话, 是可以/不必加分号的, 但是如果多个语句在一行, 则必须要加分号.
bash中的双中括号 [[ ]] 用法 参考: http://www.cnblogs.com/xkfz007/archive/2011/10/13/2209563.html https://www.dwhd.org/20150708_211624.html http://www.jb51.net/article/60326.htm
- 双中括号, 仅仅是: 单中括号的扩展. 两个方面的内容
一是: 可以用于字符串的比较, (像1, 2, 10, 20)等, 只要不是在 let expr中, 都是字符串, 可以叫 "数字字符串", 数字字符串的比较 跟 "数值比较, 数学比较" 是一样的. 用于条件判断. 可以使用于 关系比较和逻辑运算.

shell中的变量其实还是分 数据类型的, 根据你的操作命令,和 操作方式, 共有三种: 整数变量, 字符串变量, 文件变量.
shell中双小括号的用法, 有了双小括号, [[, [, test逻辑运算和let express等都 可以抛到一边了.
shell中的大括号的使用
第一, 作为"模板变量替换"使用 参考: https://www.dwhd.org/20150708_211624.html
大括号用来表示替换, 有点类似于php等脚本语言中的模板变量替换, 这种变量替换, 必须在大括号前面加上$符号(加上$符号, 这样才算是一个变量!), 才能替换, 否则,不会替换,而只是把整个大括号的内容作为一个整体的命令来解析.
注意, 整个${var:C string}, 只是替换, 最后 这个整体得到的是, 只是替换后的一个 字符串! 注意只是一个字符串, 因此, 你要用另外的命令, 来操作这个字符串, 否则, 只有字符串, shell会提示: "stirng is not a command! "
注意, 后面的替换字符串, 如果只是一个单词, 则可能会执行, 但是, 如果是带有 参数的 多个单词 的命令, 则可能不会执行!


${var: C string }, 这个表示的是 替换. 意思是当条件C 满足时,才用string替换, 否则就不 替换(还是为$var的值)
其中: -: 表示var为空的时候, 替换,
+: 表示var不为空的时候替换
=: 表示var为空的时候, 替换, 而且var 被替换为string.
? : 表示判断var是否为空, 如果不为空, 就等于$var的值, 如果为空, 就从标准错误输出string的值, 然后退出.

${var:C string}, 的string, 不一定只是变量 , 还可以是 $var, 也可以是 一个命令的输出.
比如:
echo ${var:-$foo} echo ${var:-$(date +%F)} 其中%F, 表示, full date, 完全/全部日期, %F = %Y-%m-%d.

但是需要注意的是, 在替换表达式中, 各个符号之间不能由空格, 否则,就返回 空字符串:

第二, 大括号表示模式删除, 模式去除. 其中 %表示去掉以模式结尾的部分; # 表示去除以模式开始的部分. 两个符号%%, ## 则是贪婪(最大化)匹配.

第三, 大括号表示"分配律", 分别多次多项匹配:
{1,2,3,a,b} =1, 2, 3, a,b {1, 2, 3}.txt= 1.txt 2.txt 3.txt
{1..5}.txt=1.txt 一直到 5.txt.
中括号表示多个中的一个, 而大括号表示所有的大括号中的项目都有效.
注意的是, 表示分配绿的各项之间不能有空格, 否则大括号表示的意义就没有了. 表示范围的.., 前后的两项要是单个的数字或字母, 不能是双个的字母,因为双个的字母没有办法排序.

shell编程中的单/双 小括号, 中括号, 大括号的更多相关文章
- shell编程中的 三种结构: 条件if/选择结构case/循环for/while/until等结构 和 函数的用法
shell 函数的使用 (md中, 列表本身是有格式的, 他要产生缩进, 其次,列表项和列表项之间, 可以留有一个空行, 是合法的, 允许的) shell函数,就是 就相当于一个命令来看待和处理的, ...
- Linux Shell基础 单引号、双引号、反引号、小括号和大括号
单引号和双引号 单引号和双引号用于变量值出现空格时将字符用引号括起来. 二者的主要区别在于, 被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义: 被双引号括起来的字符中,"$& ...
- shell编程中的if语句
if语句在任何编程中都是必不可少.至关重要的分支语句,shell也是如此,只不过各种编程中的方式和格式有点不太一样 shell编程中的if语句基本格式如下: if [ X$1 = XA ];then ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- Shell编程中Shift的用法
Shell编程中Shift的用法 位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shif ...
- Shell编程中while与for的区别及用法详解【转】
在shell编程中经常用到循环,常用的循环有for和while循环两种.while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别. 一.常用 ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- shell编程中如何执行oracle语句
shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...
- [ SHELL编程 ] shell编程中数值计算方法实例
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...
随机推荐
- mysql 知识
1. 数据库事务的四个特性及含义 数据库事务transanction正确执行的四个基本要素.ACID,原子性(Atomicity).一致性(Correspondence).隔离性(Isolation ...
- Rpgmakermv(15) PH任务插件
插件介绍 一个用来简单显示任务阶段的任务书 使用方法 插件安装 下载js文件放置到游戏目录/plugins目录下.打开插件管理器,选择PH_QuestBook.js并开启. 插件参数 Show in ...
- sublime text3配置及相关小技巧
1.下载&安装: 官方地址:http://www.sublimetext.com/,sublime text3又更新了,支持不依赖插件进行侧边栏颜色的更改,同时自带的皮肤颜色也有四种,十分方便 ...
- JTable的模型
2018-11-04 23:15:21开始写 模型类 import javax.swing.table.DefaultTableModel;//导入包 public class LocalTableM ...
- python操作Mysql数据库示例
python库:pymysql 安装:install pymysql.mysql数据库 一.连接数据库.创建speder库.查询版本. import pymysql ##链接数据库 db = pymy ...
- interface接口——公共规范标准
黑马课程学习记录: 个人理解也可以看成一个类:源代码还是.java,编译后的字节文件还是.class 抽象类中可以含有普通成员方法,但是有抽象方法的必须是抽象类或者接口, 接口中只能含有抽象方法: 创 ...
- c# ref和out参数
向方法传递参的时候,对应的参数通常会用实参的拷贝来初始化.就是说随便在方法内部进行怎样的修改,都不会影响作为参数传递的变量的原始值. 通过上面的例子我们可以看出来,如果一个方法的参数是引用类型,那么使 ...
- 【JavaScript 6连载】六、认识原型
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- JustOj 1927: 回文串
题目描述 回文串是从左到右或者从右到左读起来都一样的字符串,试编程判别一个字符串是否为回文串. 输入 输入一个字符串.串长度<255. 输出 判别输入的字符串是否为回文串,是输出"Y& ...
- python docopt模块详解
python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...