转载自:http://blog.chunshiban.com/2013/03/13/linux%E4%B9%8Bshell%E7%BC%96%E7%A8%8B%E7%AE%80%E6%98%8E%E8%AF%AD%E6%B3%95%E8%AF%B4%E6%98%8E/
【特殊字符】
空格,空行,TAB都将被忽略,当一行内容太长必须分到两行时用/连接同一行的内容,#用来注释
""内的变量名将自动被替换成变量内容,''中的变量名不被替换,``中的内容将首先被执行,
【执行】
更改该文档属性 chmod 775 scripts.file,然后执行该文档 | 直接以sh scripts.file来执行该文档
【变量的声明】
declare
-a|-f|-i|-r|-x从左至右依次为s数组,函数,整数,只读,透过环境变量输出变量
【变量的初始化】
等号两边不允许有空格,未初始化的变量为null
【数组】
arr=(ab cd ef gf)
$arr默认访问数组第一个元素 ${arr[2]}通过下标访问${arr[@]}|${arr[*]}获取整个数组 ${#arr[@]}获取数组长度 ${#arr[1]}获取第一个元素长度 ${arr[@]:1:2}取1,2个${arr[@]:2}取第2个及后边的${arr[@]::2}取到第二个
push: array=(" ${arr[@]}" $new-element) pop: array=(${arr[@]:0:$((${#arr[@]}-1))}) shift:array=(${arr[@]:1}) unshift:array=($new_element "${arr[@]}")
【函数】
function 函数名()
{
code
}
【基本的输入输出】
read 读入数据 echo 输出数据 print
【程序入口参数】
$0表示本身文件名和PHP_SELF相同 $1传入的第一个参数的引用
【逻辑判断】
1.文档与目录
-f 档案是否存在
-d 目录是否存在
-b 是否为一个[block档案]
-c 是否为一个[character档案]
-S 是否为一个socket标签档案
-L 是否为一个[symbolic link的档案]
-e 某个东西是否存在
2.文档属性
-r 是否为可读的属性
-w 是否为可入的属性
-x 是否为可执行文档
-s 是否为非空文档
-u 是否具有SUID属性
-g 是否具有SGID属性
-k 是否具有[sticky bit]的属性
3.文档比较
-nt 第一个文档比第二个文档新
-ot 第一个文档比第二个文档旧
-ef 两个文档为同一个文档(link 之类的文档)
4.程序的逻辑卷标
-G 侦测是否由GID所执行的程序所拥有
-O 侦测是否由UID所执行的程序所拥有
-P 是否为程序间传送信息的name pipe或者FIFO
【运算符】
1.比较运算符
=|-eq 等于运算符 !=|-ne不等于运算符 <|-lt小于 >|-gt大于 -le小于等于 -ge大于等于
2.逻辑运算符
&&与运算 ||或运算 -a双方都成立 -o有一方车成立
3.字符串
-z空字符串 -n非空字符串
【流程控制】
1.条件判断
if...then...fi,case...esac
在[]当中,只能有一个判别式,不同于其他编程语言(⊙o⊙)哦
可以用&& 或者||来组织判别式
每一个独立的组件之间都要用' '空格隔开,非常重要
case 变量名 in
种类方式一)
程序代码
;;
种类方式二)
程序代码
;;
种类方式三
程序代码
;;
*)
echo "给出提示如同switch的default"
exit 1
2.循环执行
for ((条件一;条件二;条件三)) do ... done
for variable in variable1 variable2 .... do ... done ...
while [condition] || [condition2] ... do ... done ...
until [condition] && [condition2] ... do ... done ...
常出现的错误:不支持自加自加++ 和 连写的加减+=/-=
【调试】
sh -n|-v|-x 从左至右依次是不执行检测语法错误|在执行之前,先将源代码显示在屏幕上|将使用到的源代码显示到屏幕上
【参数问题】
$#参数个数 $0文件名 $1第一个参数
【段注释问题】
a)
#空指令方式+本地文档
‘:’空命令
<<haha
haha
haha为本地文件名,之间的内容见被写入到本地haha文件中,原目的是连续执行,而不必重建另一文件,当接在':'时,则不再执行之间的动作。
:<<mark
要注释掉的代码段
mark
<<'haha' | <</haha
这其中的变量自动替换被关闭
<<haha
若注释内容中有反引号则在文件名上添加单引号,让前后两个文件名的单引号成对即可。
或者
:||{}当里边有括号时报错,所以避免里边有括号的情况。
推荐注释方法
: :||:<</COMMENTS
....注释内容
COMMENTS
#条件判断
#写成函数
function name()
{
code
}
++++++++++++一段有意思的代码++++++++++++++++++
:(){:|:&}:
递归调用,自己理解吧。