文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>bash基本语法

bash基本语法

时间:2010-04-13  来源:litandy


|          管道,将左侧命令的输出作为右侧命令的输入,可以连接很多的命令,各个命令以子进程的方式运行.
>          重定向符,将左侧的输出重定向到右侧.
<          重定向符,将右侧的输入重定向到左侧.
>>         将左侧输出追加到右侧.
$(...)     以子进程的形式运行符号里面的命令.
`...`      在命令中是使用,被引起来的命令的输出将显示在当前位置.但是建议使用$(),因为如在内部要用到`的时候需要用\来转义,看起来很费劲.
0,1,2      分别代表标准输入,标准输出,标准出错输出.
2>&1       将标准出错输出输入到标准输出中.
/dev/null  回收站,可以将输出重定向到这里,会不显示.相当于删除.
"..."      如果双引号里面有$引用的变量,会用变量的内容替换该变量的引用.
'...'      将里面的内容原封不动的输出,如果单引号里面有$引用的变量,不会用变量的内容来替换该引用.
\          转义符,对特殊符号不做解释.
$(())      将双括号内的表达式当成是算术表达式,如果不用这样括起来,将看成普通的表达式,普通表达式在没有$的情况下将看成字符串表达式,如果有$,会解释$后面的东西替换当前的$和后面的东西.
定义变量的时候不用使用$符号,在引用变量的时候需要使用$符号,定义的变量只在当前的脚本有效.
一些系统预定义的变量
$HOME      登录用户的主目录
$PS1       命令行提示符,一般是: [\u@\h\W]$
$PS2       二级命令行提示符,一般是:>
$IFS       参数分割符,一般是空格
$#         参数的个数
$*         所有的参数,用$IFS来分割
$@         所有的参数,直接用空格来分割
$0,$1,...  类似C语言main函数的参数argv[0],argv[1],...
$$         执行shell脚本的进程号
if语句
if [...]; then
...
elif [...]; then
...
else
..
fi
test命令:可以用[来代替,参数可是:
文件比较:d,f;g,u;r,w,x;s
字符串比较n,z;=,!=
算术比较:eq,ne,gt,ge,lt,le
逻辑比较:!

循环语句:
for var in exp
do
...
done
while [...]
do
...
done
until [...]
do
...
done
选择结构
case ... in ...
xx1 )
 ...
 ...;;
xx2 | xx3 )
 ...
 ...;;
...
esac
&&连接语句块,当前面的执行返回错误的时候停止
||连接语句块,当前面的执行正确的时候停止
可以将要执行的语句放到一个语句块{}中,可以通过&&,||来连接起来执行.
函数的定义
foo(){
...
}
调用的时候只写函数名,函数内部可以定义局部变量,关键字是local,局部变量的作用范围和C语言是一样的.
点命令,是在当前的shell环境下执行脚本,对变量的修改在当前的脚本环境下有效,如果不用点命令执行脚本,则创建一个新的shell环境执行脚本,对当前的环境没有任何影响,比如你执行的脚本是改变当前的节点,但是如果不用点命令执行该脚本,则在脚本执行完成后不会切换节点.
如果只是想在子shell中使用变量,则也可以将该变量导出,通过export命令.
eval命令会把后面的文本当成命令来解释执行. 定义的变量只在当前的shell环境是有效的,若要在子shell中有效就需要用export命令导出. exec命令是执行后面的命令,但是,在执行后面的命令之前,退出当前shell.该命令也可以重定向文件描述符.
比如exec 3< afile
是将文件描述符3对应到afile文件上.
expr命令将后面的命令当成表达式来求值,表达式可以通过|,&来连接,这个跟连接语句块的||,&&是一个意思,也可以通过=,>,>=,<,<=,!=,+,-,*,/,%来连接表达式,这些跟C语言的语法是一样的.但是一般都用$(())来代替 set可以修改当前脚本的参数列表(注意不是变量).unset是删除该脚本定义的变量和函数.但是不能删除shell本身定义的只读变量. shift命令就是将$2变成$1,$3变成$2,...,$0不变,影响$*,$@,$# trap命令就是设置消息钩子
trap 命令 消息号
消息有:
HUP(1)   通常是终端掉线,或是用户退出.
INT(2)   中断,通常是按下ctrl+c
QUIT(3)  退出,通常是按下ctrl+\
ABRT(6)  中止,通常是严重错误
ALRM(14) 报警,通常是超时
TERM(15) 终止,通常是系统关机
find命令:
find [path] [options] [tests] [actions]
options比较有用是:
-maxdephs n      最多搜索n层
-mount           不搜索其他文件系统.
-follow          跟随符号连接
tests比较常用的是:
-name   pattern  文件名的模式,不能包含路径名
-atime  n        在n天前访问过
-mtime  n        在n天前修改过
-type   d/f      找的文件类型是文件夹(d),还是文件(f)
-user   name     找拥有者的文件
-newer  name     找比该文件更新的文件
tests部分也可以连接:是逻辑连接
-o -a !等都是连接符.
等价的连接符是-or -and -not
测试部分可以括起来,用\(...\)来括起来.
actions比较常用的是:
-exec  command   执行命令
-ok    command   执行命令,需要用户确认
-print           输出文件名
grep命令:
grep options pattern files
options比较常用是:
-c   输出匹配的行
-i   忽略大小写
-l   列出匹配行是文件名,而不显示匹配行
-v   不匹配时候显示匹配行
正则表达式:
^       行首
$       行尾
.       任意一个字符
?       没有或一个字符
*       没有或多个字符
+       一个或多个字符
{n}     必须匹配n次
{n,}    必须匹配n次或n次以上
{n,m}   匹配次数在n次到m次之间,包括n,m
[]      在中括号里面的字符可以匹配任意一个
-       在两个字符之间的所有字符,闭区间
[:alnum:]  数字或字母
[:alpha:]  字母
[:blank:]  空格或制表符
[:lower:]  小写字母
[:upper:]  大写字母
[:digit:]  数字
[:punct:]  标点
[:space:]  空白字符或垂直制表符
[:xdigit:] 十六进制符
shell中的${...},是字符串替换,替换大括号中包起来的字符串
${param:-default}    如果param为空,则用default的值来代替
${#param}            取得param的长度
${param%word}        删除开头的字符,最小删除
${param%%word}       删除开头的字符,最大删除
${param#word}        删除结尾的字符,最小删除
${param##word}       删除结尾的字符,最大删除
${param:=bar}        在param不存在或是为空的时候返回bar,否则输出param值.好象跟${param:-bar}一样
${param:?bar}        在param不存在或是为空的时候返回bar,否则报错
${param:+bar}        在param不存在或是为空的时候返回空,否则输出bar
 
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载