-----------------------------------------------------------------Sun-------------------------------------------------------------------
一、 #符号
# 注释
行首以 #
开头(除#!
之外)的是注释。#!
是用于指定当前脚本的解释器。
结果为
$(( 2#101011)) 是 数制转换
二、;分号
1.命令分隔符
使用分号可以在一行写两个或两个以上的命令
2.终止case选项(双分号)
创建一个变量初始化为b,然后用case语句判断。
三、引号
1. 双引号“”
2.单引号‘’
单引号、双引号用于用户把带有空格的字符串赋值给变量。
str="Today is Monday"
echo $str
Today is Monday
如果没有单引号或双引号,shell会把空格后的字符串解释为命令。
str=Today is Monday
bash: is: command not found
单引号和双引号的区别。单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括$、\、`。
testvalue=100
echo 'The testvalue is $testvalue'
The testvalue is $testvalue
echo "The testvalue is $testvalue"
The testvalue is 100
四、斜线 反斜线
1.斜线
文件名路径分隔符。分隔文件名不同的部分(如/home/bozo/projects/Makefile)。也可以用来作为除法算术操作符
2.反斜线
一种对单字符的引用机制。\X 将会“转义”字符X。这等价于"X",也等价于'X'。
五、反引号 `
command
结构可以将命令的输出赋值到一个变量中去。
cp `mkdir back` test.sh back
反引号中的先执行,然后执行拷贝cp命令。
六、冒号 :
1.空命令
bash的一个内建命令,退出码是0。与 true作用相同
2.变量扩展/字串替换
: > 文件 清空了这个文件 和 cat 、dev/null 文件 作用相同。但用 : 不会产生新进程,因为是内建命令。
七、问号 ?
在双括号结构中,就是C中的三元操作符。
八、美元符号 $
1.变量替换
a=5 $a 也是 5
2.命令替换
$(命令)
九、小括号 ()
1.命令组
在括号中的命令列表,将会作为一个子 shell 来运行。在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的。父进程,也就是脚本本身,将不能够读取在子进程中创建的变量,也就是在子shell 中创建的变量。
<span style="font-size:14px;">#!/bin/bash
a=123
( a=321;)
echo "a = $a"</span>
运行显示 a=123 说明在子shell内修改了的变量,在父进程调用时是不会显示修改后的。
2.初始化数组
<span style="font-size:14px;">arr=(1 3 5 7 9)
echo ${arr[3]}</span>
结果显示 7
十、大括号 { }
1.文件名扩展
cp t.{txt,back} 复制 txt 的内容到 back 中
2.代码块
代码块,又被称为内部组,这个结构事实上创建了一个匿名函数(一个没有名字的函数)。然而,与“标准”函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。
<span style="font-size:14px;">#!/bin/bash
a=123
( a=321; ) // 小括号里的相当于局部变量
echo "a=$a"
{ a=321; } //大括号里的相当于全局变量
echo "a=$a"</span>
结果是: 123 321
十一、中括号 []
1.条件
测试条件测试表达式放在[ ]
中。
<span style="font-size:14px;">#!/bin/bash
a=5
if [ $a -gt 10 ] //-gt 大于 -lt 小于
then
echo "a: $a"
else
echo "a>10"
fi</span>
2.数组元素
在一个array结构的上下文中,中括号用来引用数组中每个元素的编号。
十二、尖括号 < > 重定向
test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。
test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。
test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。
test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。
十三、竖线 | 管道
前面命令的输出是后面命令的输入。
十四、破折号 -
1.选项,前缀
在所有的命令内使用选项参数的话,前边都要加上“-”
2.用于重定向stdin或stdout
下面脚本用于备份最后24小时当前目录下所有修改的文件.
十五、波浪号 ~
~ 表示 home 目录