apropos key-word 找到和 key-word 相关的命令。
man -k key-word 也可以做到 whatis commandname 显示该命令的一句话帮助。
commandname. man -a commandname 显示命令的解释信息。
commandname. (Unix style) info commandname 显示很长的命令解释 commandname. (GNU style) type -a commandname 显示命令 commandname 的信息。
一: shell 基本
shell 命令解释器 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型:
#echo $SHELL
查看本机器支持的shell
#cat /etc/shells 或 chsh -l 改变用户的默认shell
#chsh -s /bin/sh USER 可以直接输入 shell-name
sunOS 默认是 csh, linux默认是 bash
shell基本语法
输入输出重定向 > >> < >&s
管道pipe | command1| command2 command1| &command2
前台和后台 & ctrl + z bg fg 注意有时 shell 退出时 被 bg的程序也会退出, AIX 的shell 需要系统设置 要使用 nohup
[n]> file 重定向标准输出(或 n)到file。
[n]>> file 重定向标准输出(或 n)到file。
[n]< file 将file重定向到标准输入(或 n)。
[n1]>&n2 重定向标准输出(或 n1)到n2。
> file >&2 重定向标准输出和错误输出到file。
| command 将标准输出通过管道传递给command。
>&2 | command 将标准输出或错误输出通过管道传递给command。
$ echo Hello >foo
$ exec 3bar # 打开文件
$ cat <&3 >&4 # 重定向标准输入到 3,标准输出到 4
$ exec 3<&- 4>&- # 关闭文件
$ cat bar
Hello
n<&- 和 n>&- 表示关闭文件描述符 n。
shell程序的变量和参数
$0 = shell名称或shel脚本名称
$1 = 第一个(1)shell参数 ... $9 = 第九个(9)shell参数
$# = 位置参数的个数
"$*" = "$1 $2 $3 $4 ... $n"
"$@" = "$1" "$2" "$3" "$4" ... "$n"
$? = 最近执行的命令的退出状态
$$ = 当前shell脚本的PID
$! = 最近启动的后台作业的PID
需要记住的基本扩展参数:
Form If var is set If var is not set
${var:-string} $var string
${var:+string} string null
${var:=string} $var string (并且执行var=string)
${var:?string} $var (返回string然后退出)
${parameter:offset:length}
Form Result ${var%suffix} 删除位于var结尾的suffix最小匹配模式
${var%%suffix} 删除位于var结尾的suffix最大匹配模式
${var#prefix} 删除位于var开头的prefix最小匹配模式
${var##prefix} 删除位于var开头的prefix最大匹配模式
${!prefix*}
${!prefix@}
${!name[@]}
${!name[*]}
${#parameter}
${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
${parameter/pattern/string}
${parameter//pattern/string}
$(command) `command`
$((expression))
shell程序设计的流程控制
test测试命令 man test
条件表达式 command && if_success_run_this_command_too
command || if_not_success_run_this_command_too
if条件语句
man test if list; then list; [ elif list; then list; ] ... [ else list; ] fi if [ ] if [ ] ; then then echo "" elif [ ] then echo "" else echo "" fi
for循环 for name [ in word ] ; do list ; done for (( expr1 ; expr2 ; expr3 )) ; do list ; done select name [ in word ] ; do list ; done
while和until循环
while list; do list; done until list; do list; done
case条件选择 case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac case variable in exp-1) ;; exp-2) ;; *)
其他命令行 esac break和continue
function Function name { 若干命令行 } 调用函数的格式为: functionname param1 param2…… 命令分组 “()”和“{}”,
信号 trap
运行shell程序的方法 sh shell程序文件名 该方法的优点是可以利用shell调试功能
sh 这种方式就是利用输入重定向,使shell命令解释程序的输入取自指定的程序文件。 用chmod命令使shell程序成为可执行的
bash程序的调试
-e:如果一个命令失败就立即退出 -n:读入命令但是不执行它们 -u:置换时把未设置的变量看作出错 -v:当读入shell输入行时把它们显示出来 -x:执行命令时把命令和它们的参数显示出来
bash的内部命令 echo
eval shell读入参数args,并将它们组合成一个新的命令,然后执行。 exec
export
readonly 将一个用户定义的shell变量标识为不可变的。不带任何参数的readonly命令将显示出所有只读的shell变量。 read 从标准输入设备读入一行,分解成若干字,赋值给shell程序内部定义的变量。 shift shift语句按如下方式重新命名所有的位置参数变量:$2成为$1,$3成为$2……在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数“$#”减一,直到减到0。 wait
exit
“.”(点) 使shell读入指定的shell程序文件并依次执行文件中的所有语句。
YYMM=$1 expr $YYMM + 1 > /dev/null 2>&1 if [ $? -ne 0 ] then exit fi
.
一: 常用命令 echo -n 不换行 ls
-d 将目录象文件一样显示,而不是显示其下的文件。
-a 列出目录下的所有文件,包括以 . 开头的隐含文件。
-l 列出文件的详细信息。
-m 横向输出文件名,并以“,”作分格符。
-p -F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通 文件;“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
-1 一行只输出一个文件。 cp
-f 删除已经存在的目标文件而不提示。
-i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
-r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。 rm
-f 删除已经存在的目标文件而不提示。
-i 和f选项相反,在删除目标文件之前将给出提示要求用户确认。。
-r 若给出的源文件是一目录文件,此时rm 将递归删除该目录下所有的子目录和文件。 mkdir
-p 创建丢失中间路径名称目录
-m 标志为新的目录指定许可权
mkdir -p -m $(umask -S),u+wx $(dirname Directory) && chown chgrp groupadd useradd alias locate basename dirname
paste
-d List 用指定在 List 参数(缺省是制表符)中的一个或多个字符来更改分隔输出中相应行的定界符。 join diff comm sort
-k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ] [+[FSkip1] [.CSkip1] [Modifier] ] [-[FSkip2] [.CSkip2] [Modifier]]
-n 按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。 o OutFile 将输出指向 OutFile 参数指定的文件,而不是标准输出。OutFile 参数值可以与 File 参数值相同。
-r 颠倒指定排序的顺序。
-T Directory 将创建的所有临时文件放入 Directory 参数指定的目录中。 uniq
-c 在输出行前面加上每行在输入文件中出现的次数。
-d 仅显示重复行。
-u 仅显示不重复的行。
cat head tail tac cut wc grep sed tr awk expect perl lsof nc
zcat tar gzip gunzip bzip2
bc dc expr find xargs let seq
vim %!command
ar date mc nm
seq 1000|factor|cut -f2 -d' '|sort -n |uniq 求1000以内的素数