1. shell的变量
由于Linux是多人多任务系统,所以每个人都是用的shell,但是变量不同,所以命令产生效果就会不同。例如都执行mail,但读取的都是
自己的邮件档案(依据是MAIL变量)。PATH则是影响执行文件搜索路径的变量。
echo用于显示变量,而a=b直接给变量赋值,unset可以取消某个变量。
注:在shell中执行命令,会打开子程序,产生新的shell,但只有环境变量可以继承,父shell自定义的变量不能继承。
env用于观察环境变量,set用于观察所有变量。
export用于将自定义变量变为环境变量,declare -x 也有这样的功能。
shell脚本可以用read -p "XXX" -t time XXX ,将用户输入变为XXX变量。
declare可以定义后面变量的类型,-a array,-i int,(这样才可算术运算,因为默认都是字符串)。
shell登入有两种方式,login和nonlogin,例如xwindow中的终端就是nonlogin,这两种读取配置文件不同。
login shell,会读取/etc/profile(系统配置,不要更改,还会调用/etc/profile.d/*.sh),~/.bash_profile或者~/.profile
或者~/.bash_login(用户配置,只会读取其中一个)。
更改这些文件后,可以用读取环境配置的指令source,来立即更新。(小数点.也可以)
nonlogin shell,仅会读取~/.bashrc
其它相关的配置文件:/etc/man.config, ~/.bash_logout
2. 数据流重定向:
标准输入stdin,代码0,符号<或<< (重定向键盘输入)
标准输出stdout,代码1,符号>或>> (<是覆盖,<<是累加,下面类似)
标准错误stderr,代码2,符号2>或2>> (要想不显示,可以重定向到/dev/null)
如果要将1和2都重定向到一个文件,find xxx >a 2>&1
3. 正规表示法:
正规表示法就是利用特殊字符的辅助,以一行为单位对文本进行处理,达到搜寻,删除,替代特定字符串的功能。
像grep,awk,sed都支持,但cp,ls都是不支持的,所以这些指令都只能使用bash内建的通配符而已,功能有限。
a. 搜索特定字符串,显示行数:grep -n;反向搜索,显示行数,grep -vn
b. 利用[]搜索集合字符,grep -n 't[ae]e' filename,或者集合字符的反向,grep -n 't[^ae]e' filename,([^a-z]则表示不含小写字母)
c. 指定行首或行尾字符串,grep -n '^the' filename ; grep -n 'the$' filename
d. 通配符,*表示可以没有或有,.表示一定有一个或多个。grep -n 'g..d' filename
e. 一定范围得连续个字符,grep -n 'go\{2,5\}d' filename ;(2到5个o,因为{}有特殊含义,所以要用\进行转义)
4. sed和awk运用:
可以用man sed与man awk查看,sed主要对包含特定字符串的行进行操作,而awk主要对行中的字段进行操作 ($1,$2,$3,...)。
5. shell编程:
其实shell编程和C语言编程差不多,都是结构化,流程化编程语言,但C程序重在输入,运算,输出;而shell重在利用命令操作文件,字符串。
a. 流程控制:任何结构化编程语言都要流程控制,不过java等面向对象语言一般都放在了函数内部。
条件判断,if...then; case...esac;
循环,while...do...done; for...do...done;
b. 函数:function
c. 字符串变量,数值运算,判断式,默认参数($0,$1...)
阅读(1295) | 评论(1) | 转发(0) |