在最难就业季的升级版,作为一张白纸的大学生,尤其是妹纸,各种困难啊有木有。发现很多公司都要求至少会一种脚本语言,于是决定学一下shell。本以为很简单,下了本电子书,发现内容还是很多的,仔细看的话也有很多细节。在此做了下笔记,里面只是个人认为没有牢固掌握的,有些常用的但自己已经知道的就没有做记录,因此权当做个人的笔记。
1.以#!开头后面可传递解释器的路径,其后不要加空格,因为其也会被传递给被引用的程序。
2.#!行的长度尽量不要超过64个字符。(根据系统不同长度限制为64~1024)
3."#! /bin/sh -"中的-表示没有选项,避免了欺骗攻击。
4.两个破折号(--)常表示长选项的开头,也可表示选项结尾。
5.分号(;)可用来分隔同一行里的多条命令,shell会依次执行。如果是&则shell会后台执行前面的命令(shell不用等到命令完成就可以执行后一条命令)。
6.shell变量名开头是一个字母或下划线,长度无限制。
7.多个变量作为一个新值时需要用双引号括起来,如fullname="$first $middle $last"。
8.echo的-n选项表示忽略最后的换行符,如echo "Enter your name:"。也可以在结尾加\c表示不要打印换行符。
9.echo版本上有差异,可用printf代替。printf需显式的提供换行符\n。
10.<改变标准输入,>改变标准输出,>>附加到文件尾部。从左往右执行,如:tr -d '\r' < dos-file.txt > UNIX-file.txt。这条命令先将dos-file.txt里的回车删除,再输出到UNIX-file.txt。
11.位桶(bit bucket)是一个特殊文件/dev/null。如果需要的是命令的退出状态而非其输出,可使用此文件。如:if grep pattern myfile > /dev/null then ... else ... fi。读取/dev/null会立即返回文件结束符号。
12.打开/dev/tty时会自动将它重定向到一个终端(实体控制台或串行端口或通过网络与窗口登陆的伪终端)再与程序结合。这在程序必须读取人工输入时特别有用。也可用来产生错误信息,但不常用。
13.$PATH可用来查找路径,以冒号分隔,空项目表示当前目录,根据空项目位置表示查找当前目录的顺序(从左往右),有版本不支持$PATH结尾的空项目。将当前目录纳入查找路径时最好使用点号,让阅读程序的人更清楚。一般不应在查找路径放入当前目录,会存在安全问题。
14.位置参数(positional parameters)也就是shell脚本的命令行参数。在shell函数里,也可以是函数参数,各参数都由整数来命名。基于历史原因超过9时需用大括号括起来。如:echo tenth arg is ${10}
15.用set -x命令打开执行跟踪功能,set +x关闭。显示的命令前面会有"+"。
16.控制让哪种语言或文化环境生效的功能叫做locale。LC_ALL强制设置单一locale,LANG用来设置locale默认值。