1.
shift命令:用户把命令行的参数向左移动一个位置,当使用shift命令时,第一个参数被丢弃。shift命令丢弃最左边的变量($1)并把剩余的变量重新指定值,可以在shift操作后,参数值永远丢弃并不能被程序恢复。
可以一步完成多个shift操作,比如shift 3。
2.
read命令:从用户那里取得一行输入并把它指定给一个变量,变量名作为一个参数提供给read命令。
3.
用于echo命令的规避字符:
\a 报警字符
\b 退格
\c 在显示文件的结尾禁止新行
\f 换页
\n 插入一个新的字符行
\r 回车
\t 插入一个TAB字符
\\ 反斜线
4.
数字测试:
-eq 等于 -ne 不等于 -lt 小于 -gt 大于 -le 大于或等于 -ge 大于或等于
5.
字符串测试:
string1 = string2 如果string1等于string2为真
string1 != string2 如果string1不等于string2为真
-z string 如果string的长度是零为真
-n string 如果string的长度不是零为真
string 同上
6.
文件测试:
-d file 如果一个文件是一个目录为真
-f file 如果文件存在并且是一个正常文件为真
-L file 如果一个文件是符号链接为真
-s file 如果一个文件长度大于0字节为真
-r file 如果一个文件是可读为真
-w file 如果一个文件是可写为真
-x file 如果一个文件是可执行为真
-e file 如果一个文件存在为真
file1 -nt file2 如果file1比file2新为真
file1 -ot file2 与上面相反
7.
逻辑操作符:
expr1 -o expr2 逻辑或,如expr1或expr2其中一真即为真
expr1 -a expr2 逻辑或,如expr1与expr2都真即为真
!expr 逻辑非,非之即真
8.
调试程序时,可以把程序第一行#!/usr/bin/sh后面加上-x,当你执行这个程序时,它在执行前把每一行显示在终端屏幕上,在程序中真正的行在它的开头显示一个+号,后面跟着它的输出,注释信息不显示。
9.
如果一个shell程序中没有提供shell名,程序可能被一个错误的shell执行,由于每种shell有不同的控制结构,执行不会成功。
10.
test命令的真返回值是0
11.
编写时需注意:if空格[空格"$1"空格=空格"$2"空格]
12.
for-do-done:以固定次数执行一个命令块
while-do-done:循环检查一个条件并执行一个程序块直到条件变成假
until-do-done:循环重复执行一个命令块直到一个条件为真,循环中止
let命令用户在循环中做算术,逻辑和赋值操作并改变控制变量的值。
显式表达:let "var1">"var2"
隐式表达:((var1>var2))
13.
使用sed流编辑器,从stdin得到文本并编辑后发送到stdout
sed s/echo/ECHO/g myfile
将当前目录中的所有文件中的echo替换成ECHO
shell例子:
#!/usr/bin/sh
for FILE in *
do
cat $FILE | sed s/echo/ECHO/g >tempfile
cp tempfile $FILE
done
rm tempfile
在使用sed替换的时候,如果有替换内容是目录,可以使用:来分隔,比如想将/etc/passwd里面的/usr/bin/sh替换为/usr/sh:
sed s:/usr/bin/sh:/usr/sh:g /etc/passwd
http://moko39848381.blog.163.com/blog/static/139827331201031810103953/
14.
使用cut:从一行文本中提取数据的特定部分
cut -f 1 -d : /etc/passwd
-f 1选项告诉这个命令你想提取的字段号是1,-d :选项里显示数据中的字段使用:分隔
cut -c 1-8 #提取每行前8个字符
shell例子:
#!/usr/bin/sh
for USER in $(cut -f 1 -d : /etc/passwd)
do
mailx -s "Test mail" $USER<mailfile
done
用cut创建一个用户名列表并给列表中一个名字发送一个mail消息
cut用法:http://moko39848381.blog.163.com/blog/static/139827331201031892527196/
15.
使用sleep命令用户把执行挂起一段特定的时间
for FILE in *
do
ll $FILE
sleep 5
done
列出当前目录下的所有文件并在每个文件之间暂停5秒
16.
输出制表符:
a=1
b=2
c=3
HP-UX::echo "$a\t$b"
reahat:echo -e "$a\t$b"