shell入门篇
脚本语言通常是解释型。由解析器读入代码,将其转换成内部形式,再执行。解释器就是一般的编译型程序。
优点:运行在较高的级别,能轻易的处理,文本与目录之类的对象。
缺点:效率上不如编译型语言。(从感观上说脚本已经够快了,所以基本上这个问题可以让人理解或者忽略)
shell是经过posix标准化过的,能 运行在绝大多数的unix与类unix上,gun/linux。
满足unix五大原则:
免交互 ; 一切设备就是文件,一切配置是文本;
shell脚本基于:简单,可移植,开发简易。
作用:常用于系统管理。
入门
#!(尽量不超过64个字节)文件开头的位置是这个字符,则内核会扫描该其于部分
看是否存在解析器的完整路径。
你肯定要知道解析器的完整路径。
交互式shell命令
command 选项 参数
-短选项 //有的不加-
--长选项 //一般gnu选项,看命令而定
;分割同一行的多条命令。用于运行多条命令。
使用&而不是分号,则是在后台运行,则shell不用等命令结束,就可以继续下一条命令。
Shell识别的三种命令:
1:内建命令。Shell自身运, cd ,read 将用户或文件的输入传递给shell变量。另一种是位效率,test.还有i/o命令,echo 与printf。
2:shell函数。功能健全的代码,以及shell语言写成。可以想命令那样运行。
3:外部命令是shell的副本所执行的命令。
过程。a,建一个进程shell副本。b,在进程里,path变量内寻找所列出的目录中,寻找特定的命令。c,找到该命令,运行shell程序并运行。d,程序完成之后,最初的shell会读取终端的下一条命令。
父shell---->子shell——>命令(进程)---------->父shell
shell变量
shell变量开头字母或者是下划线,长度可以很长
变量赋值
变量名=字符,中间不能有任何空格。
引用变量值加'$'(变量值可以是null)
echo $变量
echo 与printf
I/O重定向。
lrwxrwxrwx. 1 root root 15 4月 28 2012 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 4月 28 2012 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 4月 28 2012 /dev/stdout -> /proc/self/fd/1
> 改变标准输出 // cat /etc/passwd >passwd.txt
< 改变标准输入 // cat > passwd.txt
>>付加到文件 // echo "this is passwd files" >> passwd.txt
A < B > C //这种格式非常有用。
for i in 1.txt
do
tr -d '\t' <$i >2.txt
done
管道|
program1 | program2 管道执行的速度比零时文件快上十倍。弥补了重定向的不足。从定向需要零时文件,肯定拖慢脚本速度。但是在做系统日志之类的脚本时又不得不用。
例如:
grep '\<sendmail[' /var/log/maillog |tail -n 10000 /var/log/maillog > /tmp/maillog
构造管道的时,应该把各阶段数据变少。就是慢慢流。
使用,sort之前先用grep找出相关行,可以sort少做点事。还有先sort -rn | uniq -c 排序。
特殊文件。
/dev/null 传到这个文件的数据会被系统丢掉。黑洞,一般脚本我们不想查看输出过程只要结果怎么办,那/dev/null就派上用场了。例如
if grep student /etc/passwd >/dev/null 2>&1
then
echo "the system has student "
fi
如果系统有student用户则输入有用户,而不要把passwd匹配的那行显示出来,安全。
/dev/tty
等待终端输入。
$echo $PATH //查看PATH 是否有”:“存在
空项目移植上有点问题。:在开头表示当前目录,在最后,查找最后,在中间,当前居中。
Positional parameters位置参数,也可以是函数参数。个参数用整数来命名。
$1----$9 超过${10}
简单的跟踪,用来除错的。Set -x ,set +x取消跟踪。
或者用echo 输出来debug。
国际化与本地化 i18n 与l10n
locale语言文化生效。
要明确Locale 对程序的影响.