ls -l dir1 | wc -l .
1。while 条件 ; do done //(()) [] test
2。until同上,仅仅是条件不成立的时候才执行
3。/dev/null : unix 黑洞。 用于清空文件 cat /dev/null > xx find -name a.txt 2>/dev/null
4。注意:陷阱题之continue跳出循环后,把打印的东东留在了缓冲区,结果一直都没有打印出来。
5。命令列表 && && | | | | ,后一个命令是否执行依赖于前一个命令的成功与否。
6。语句块{}: (ls "$1") && { echo "$1" .......}
7。函数 1。function fun1{} fun1(){} 注意:函数没有返回值,调用直接写函数名即可。( )中不允许出现行参,只能为空。 declare -f 查看所有滴函数
shell的函数,对于shell来说是新的shell进程,如此传参:fun1 1 2 3 ,$0永久不变,$1之后的位置参数在函数内是局部的,外依旧是主程序的位置参数。
8。shell编程是在命令的基础上的,所以应该时刻想着以命令的格式来编写代码,不要搞错聊。
9。函数中的return 是返回的是:返回码,必须是int行,不能是其他的类型。最多255,0代表成果。如果val=$(fun),则取出来的是:函数所输出的东西。
10。shell中,任何命令都是有返回码的,而且必须有---因为默认就有。(以最后一句代码作为返回值)
11。加上( ) 表示在子shell中去执行,否则是在当前shell中执行。
12。如果非要函数有返回 ,那只能使用全局变量了,没别的办法了。可是,走运了,函数中的变量默认就是全局性的,加了local修饰的变量才是函数的局部变量了。
$( fun ) 取出来的是:echo打印出来的东西,并不是return 值。
13。普通的调用函数是不会启动新的进程的。调用shell会启动新进程的。a.sh exec a.sh (exec是不会创建新的进程的)
14。fork () exec source ,这4种方式来进行执行子shell,前2个方式会新建立个shell程序,后2个则是在当前shell下进行的执行。
15。export到出变量,使变量能够在子shell中起效。
16。在系统中,进程是颗树,他们是具有关系的(父子爷。。。)
17.内建命令(用enable来查看):是在shell启动时就已经被加载到内存中去的。如:pwd echo 外部命令:需要通过PATH来配置其外部程序。
18.jobs 查看后台程序,fg %n bg %n ctrl+ z 挂起.。 echo -E -e -n 建议使用 printf (注意:%s中间不能够有空格,因为替换之后就成了2个参数了,因为中间有空格)
19.注意:shell编程的基础是命令的集合,所以,他不像其他编程语音一样的格式,他基本上都是通过空格来表达他的参数与识别。 这就是命令形式的编程。
20.eval:把字符串当成是命令来使用。尽量不用,有风险。
21.set 重新设置位置参数。 set $(date) echo $2 , set -o unset 删除某个变量
22. shift 把位置参数都做移 一位,原来$1的值就被丢弃了。呵呵,$0 永远保持不变。
23.进程很多情况下是接到信号结束的。呵呵
24.trap命令:指定当接受到信号后将要采取的行动。 trap 命令 信号整数 trap - SIGOUT -表示,用默认的响应来响应该信号。
25.shell中 :冒号表示空语句,同时也表示逻辑真
26.$$ 进程号 $? 上一个命令的返回值
27.exit n ; 0 成功 1-255 错误信息 126无权限 127命令未找到 128别信号打断
28.find 路径 选项 测试部分 动作部分
29;用;可以分隔多个命令在同一行 ; 信号:即中断技术 ; tar -cvf shell.tar * tar -tf shell.tar
30. $() ` ` 命令替换; 进程替换: > 即重定向 ; grep 选项 正则 文件 | 路径
31.特殊元素: ls -l | grep -E a[ [ :blank: ] ] 命令行,所有特殊字符都要转义。 或者用 " ",就可以不用/来转义了。
32. AWK 工具:== gawk ,awk -F '{ print $1 }' /etc/passwd BEGIN{} /正册匹配即执行后门大括号/{} END{} my.awk文件。前后块,各执行一次。中间则一行执行一次。正则部分,匹配成功,就那个执行{}。
33. 图形话工具: dialog gdialog