Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > 小吕的shell tips
【标  题】:小吕的shell tips
【关键字】:shell,tips
【来  源】:http://www.cublog.cn/u/17764/showart.php?id=115506

小吕的shell tips

Your Ad Here
小吕的shell tips


不带参数的cat使用标准输入作为其输入

<CTRL r> 后,shell 就进入"reverse-i(ncremental)-search"(向后增量搜索)模式,输入首字母可以进行搜索,回车后直接执行

l <CTRL k>:删除从光标到行尾的部分

l <CTRL u>:删除从光标到行首的部分

l <ALT d>:删除从光标到当前单词结尾的部分

l <CTRL w>:删除从光标到当前单词开头的部分

l <CTRL a>:将光标移到行首

l <CTRL e>:将光标移到行尾

ALT a>:将光标移到当前单词头部

l <ALT e>:将光标移到当前单词尾部

l <CTRL y>:插入最近删除的单词

l <!$>:重复前一个命令最后的参数。

l .bash_history :记录了您以前输入的命令,

l .bash_logout :当您退出 shell 时,要执行的命令,

l .bash_profile :当您登入 shell 时,要执行的命令,

l .bashrc :每次打开新的 shell 时,要执行的命令

系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中

kill -l #列出系统的信号列表
stty -a 查看所有的终端设置

在Bash下调用信号的方法为:
trap  command/function  sig1  sig2  ...

名称            默认动作            说明
SIGHUP          终止进程            终端线路挂断
SIGINT      终止进程            中断进程
SIGQUIT     建立CORE文件           终止进程,并且生成core文件
SIGILL      建立CORE文件        非法指令
SIGTRAP     建立CORE文件        跟踪自陷
SIGBUS      建立CORE文件        总线错误
SIGSEGV     建立CORE文件        段非法错误
SIGFPE      建立CORE文件        浮点异常
SIGIOT      建立CORE文件        执行I/O自陷
SIGKILL     终止进程            杀死进程
SIGPIPE     终止进程            向一个没有读进程的管道写数据
SIGALARM        终止进程            计时器到时
SIGTERM     终止进程            软件终止信号
SIGSTOP     停止进程            非终端来的停止信号
SIGTSTP     停止进程            终端来的停止信号
SIGCONT     忽略信号            继续执行一个停止的进程
SIGURG      忽略信号            I/O紧急信号
SIGIO       忽略信号            描述符上可以进行I/O
SIGCHLD     忽略信号            当子进程停止或退出时通知父进程
SIGTTOU     停止进程            后台进程写终端
SIGTTIN     停止进程            后台进程读终端
SIGXGPU     终止进程            CPU时限超时
SIGXFSZ     终止进程            文件长度过长
SIGWINCH        忽略信号            窗口大小发生变化
SIGPROF     终止进程            统计分布图用计时器到时
SIGUSR1     终止进程            用户定义信号1
SIGUSR2     终止进程            用户定义信号2
SIGVTALRM       终止进程            虚拟计时器到时

strace echo "test" 查看echo命令运行时的系统调用和信号
设置字符控制台: setleds -D +num/+caps/+scroll
显示文本奇数偶数的方法: sed -n '1,$p;n' tmp(奇数),sed -n '1,$p;p' tmp(偶数)
行号倒序:tac;每行倒序:rev
watch
vi中: 2,4!tr 'a-z' 'A-Z',从第2行到第4行的字母就都转换成大写
uniq -u(uniq) -d(duplicate)

在shell里进行算术运算常用的3种方法
1,expr
expr 1 + 2 #注意空格
2,(())
((n=1+2))
3,bc
echo "1+2"|bc #优点可以取小数点的位数
4,
echo $[1+2]

showkey 检查来自键盘的扫描码和键盘码
从键盘生成文件:
dd </dev/tty >filename 2>/dev/null
while read i;do echo $i >>filename;done</dev/tty
while true;do read;echo $REPLY >>filename;[[ -z $REPLY ]]&&break;done

vi小技巧
:map <F9> ggO#^R%---<Esc>:read !date +\%m/\%d/\%y<CR>kJ$a---OK<Esc>
每次我敲<F9>自动在文件头加一行如下:
#xxx---05/10/04---OK
这里xxx是正在编辑的文件名

用grep提取网址/链接的方法
grep -o 'http://[a-zA-Z0-9./?=%_~]*' urlfile

${var/old/new} 替换一个
${var//old/new} 将var中的所有old值换为new

Shell 默认有10个文件描述符
exec 9>&1 #把fd1的指针复制到fd9,即dup(1,9),或者理解为fd9=fd1
          #此时,fd9和fd1同时指向一个文件,也可以认为fd1的指针保存在fd9中一份
command1 2>&1 >&9 9>&- | command2 9>&-
#对上面一行的解释:
#shell创建一个pipe,然后fork两个subshell
#第一个subshell,将fd1指向pipe文件,此时fd9仍然保存这父进程中fd1的文件指针
# stdout,然后处理重定向:fd2=fd1;fd1=fd9;fd9=null
# fd9关闭,但是stdout并没有关闭,只是减少打开次数
# 最好subshell执行command1命令,command1要输出时取fd1中的指针,stdout

#第二个subshell,精确拷贝一份父进程的fd表,将fd0指向pipe文件
# 关闭fd9              

Bash内建参数
===========

PPID : 该bash的呼叫者process ID.
PWD : 目前的工作目录。
OLDPWD : 上一个工作目录。
REPLY : 当read命令没有参数时,直接设在REPLY上。
UID : User ID。
EUID : Effective User ID。
BASH : Bash的完整路径。
BASH_VERSION : Bash版本。
SHLVL : 每次有Bash执行时,数字加一。
RANDOM : 每次这个参数被用到时,就会产生一个乱数在RANDOM上。
SECONDS : 从这个Shell一开始启动後的时间。
LINENO : Script的行数。
HISTCMD : 历史记录数。
OPTARG : getopts处理的最後一个选项参数。
OPTIND : 下一个要由getopts所处理的参数号码。
HOSTTYPE : 机器种类。
OSTYPE : 作业系统名称。
IFS : Internal Field Separator。
PATH : 命令搜寻路径。
PATH="/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:."
HOME : 目前使用者的home directory;
CDPATH : cd命令的搜寻路径。
ENV : 如果这个参数被设定,每次有shell
script被执行时,将会执行它所设定的档名做为环境设定。
MAIL :
如果这个参数被设定,而且MAILPATH没有被设定,那麽有信件进来时,bash会通知使用者。
MAILCHECK : 设定多久时间检查邮件一次。
MAILPATH : 一串的邮件检查路径。
MAIL_WARNING : 如果有设定的话,邮件被读取後,将会显示讯息。
PS1 : 提示讯息设定,内定为"bash$ "。(请详见提示讯息一节。)
PS2 : 第二提示讯息设定,内定为">; "。
PS3 : select命令所使用的提示讯息。
PS4 : 执行追踪时用的提示讯息设定,内定为"+ "。
HISTSIZE : 命令历史记录量,内定为500。
HISTFILE : 历史记录档,内定~/.bash_history。
HISTFILESIZE : 历史记录档行数最大值,内定500。
OPTERR : 如果设为1,bash会显示getopts的错误。
PROMPT_COMMAND : 如果设定的话,该值会在每次执行命令前都显示。
IGNOREEOF : 将EOF值当成输入,内定为10。
TMOUT : 如果设为大於零,该值被解译为输入等待秒数。若无输入,当成没有输入。
FCEDIT : fc命令的内定编辑器。
FIGNORE : 请详见READLINE。
INPUTRC : readline的startup file,内定~/.inputrc
notify : 如果设定了,bash立即报告被终结的背景程式。
history_control, HISTCONTROL : history使用。
command_oriented_history : 存入多行指令。
glob_dot_filenames : 如果设定了,bash将会把"."包含入档案路径中。
allow_null_glob_expansion : 如果设定了,bash允许路径明称为null string。
histchars : history使用。
nolinks : 如果设定了,执行指令时,不会跟随symbolic links。
hostname_completion_file, HOSTFILE : 包含与/etc/hosts相同格式的档名。
noclobber : 如果设定了,Bash不会覆写任何由">;"、">;&"及"<>;"所操作的档案。
auto_resume : 请见任务控制一节。
no_exit_on_failed_exec : 如果该值存在,非互动的shell不会因为exec失败而跳出。
cdable_vars : 如果启动,而cd命令找不到目录,可切换到参数形态指定的目录下。

第一组字符串处理操作符:测试变量的存在性以及允许在一定条件下对默认值进行替换
${varname:-word} 如果变量未定义,返回一个默认值;否则打印varname值
${varname:=word} 如果变量未定义,设置该变量为默认值;否则打印varname值
${varname:?message} 如果变量未定义,返回message并退出;否则打印varname值
注:最上面两个的冒号可以省略,只测试辨别的存在性,不对非空进行测试
${varname:+word} 如果varname存在且非空,返回word,否则返回null
${varname:offset} 子字符串以offset开始,知道varname结束 (第一个字符从0开始)
${varname:offset:length} 子字符串从offset开始,长度为length

${variable/pattern/string}
${variable//pattern/string}
注:将variable中匹配模式的最长部分替换为string,第一种格式只替换第一个匹配结果
第二种格式替换所有匹配结果。如果模式以#开头则必须匹配varibale的开头,如果模式以
%开头,则必须匹配varibale的结尾。如果string为null,匹配部分被删除。如果varible为
@或*,操作被依次作用于每个位置参数并且扩展为结果列表。
${variable##*/}等价于basename,前者效果好,因为其运行于自己的单独进程中
${variable%%/*}等价于dirname


echo ${d-'*'} 如果变量 d 未设置则回显"*",否则显示d的值,不会对d的值产生影响
echo ${d="*"} 如果变量 d 以前未设置则把它设置为字符串,永久生效的
echo ${d:+"*"} 如果变量d 设置了值则替换为*,否则打印变量d的值
echo ${d?message} 如果变量d未设置,则显示message的值,并终止shell执行

取得字符串的长度:
echo ${#variable}
expr length "$variable"
expr "$variable" : ".*"

查找字符串子串位置:
expr index "$var" "substring"

得到字符串子字符串:
expr substr "var" startposition length #从1开始
echo ${var:position:length} #从0开始

匹配正则表达式之匹配长度:
expr match "$x" "string"


变量的特殊控制:匹配替换结构

file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:从变量file的字符串左边开始,删除字符直到第一个“/”:dir1/dir2/dir3/my.file.txt
${file##*/}:从变量file的字符串左边开始,删除字符直到最后一个“/”:my.file.txt
${file#*.}:从变量file的字符串左边开始,删除字符直到第一个“.”:file.txt
${file##*.}:从变量file的字符串左边开始,删除字符直到最后一个“.”:txt
其实,在“#”后面,无非就是一个匹配问题,不限于两个,你可以放任意个字符,还可以用shell中另外的通配符“?”“[…]”“[!…]”,例如:
$ echo ${file#????}
1/dir2/dir3/my.file.txt
$ echo ${file#*[0-9]}
/dir2/dir3/my.file.txt
$ echo ${file#/dir1/dir[0-9]}
/dir3/my.file.txt

“#”:相当于最小匹配,遇到一个最小的符合其后表达式的字符串(单个或多个)即中止匹配
“##”:相当于最大匹配,它尽可能的匹配更多的字符。

!!!!! 只有pattern里面出现了通配符,才有最大和最小的区别,否则效果一样的

*  在shell中表示匹配任何符号包括空。当它在只有一个#的变量替换中,
受最小匹配的影响,它不会匹配任何可打印字符,只匹配一个空,就是什么都不匹配
当在有两个 ## 的变量替换中,受最大匹配的影响,一个 * 表示匹配整个字符串
果想匹配字符“*”时,要在“*”前加一个“\”,其后的“*”失去通配符的功能
但是还有一种例外情况(请接着看)
例:
$ file2=abcd.efgh.ijkl.oopp
$ echo ${file2#*.*.*.*} #输出:oopp
$ echo ${file2##*.*.*.*} #输出为空
因为:“*”匹配任何符号包括空。遇到一个“#”时,最后一个“*”就匹配“空”去了

$ echo ${file2#*.*.*.?} #opp
$ echo ${file2#*.*.*.?*} #opp
$ echo ${file2##*.*.*.?} #opp
$ echo ${file2##*.*.*.?*} #空

$ echo $file3
*ab*de*cd
看看下面将输出什么?
$ echo ${file3#*ab} #*de*cd
$ echo ${file3#**} #*ab*de*cd
$ echo ${file3##**} #空
$ echo ${file3#\*ab} #*de*cd
$ echo ${file3#\**} #ab*de*cd
$ echo ${file3##\**} #空(第二个*最大匹配所有内容)
$ echo ${file3#*a} #b*de*cd
#从变量file3的字符串左边开始删除字符,直到遇到第一个字符“a”。
$ echo ${file3#\*a} #b*de*cd #和上面一行的意义不同

“*”在一个“#”中时,并不一定代表“空”,它可能代表一个字符“*”也可能代表其他的什么字符

$ echo $file3
*ab*de*cd*ab*de                     //注意:出现两个“*ab”
$ echo ${file3#*a}
b*de*cd*ab*de //删除字符,直到出现第一个“a”,“*”为通配符
$ echo ${file3##*a}
b*de //删除字符,直到出现第二个“a”,“*”为通配符
$ echo ${file3##\*a}
b*de*cd*ab*de //删除字符串“*a”,“*”在“\”表示字符“*”

至于“%”,和“#”不同的地方,就是从变量字串右部开始。
${file%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/”
:/dir1/dir2/dir3
${file%%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”:(空值)
${file%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:/dir1/dir2/dir3/my.file
${file%%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”:/dir1/dir2/dir3/my

$(cmd)中的命令的错误输出是不会被替换的
一串的命令执行()和{}
()和{}都是对一串的命令进行执行,但有所区别:
A,()只是对一串命令重新开一个子shell进行执行
B,{}对一串命令在当前shell执行
C,()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
D,()最后一个命令可以不用分号
E,{}最后一个命令要用分号
F,{}的第一个命令和左括号之间必须要有一个空格
G,()里的各命令不必和括号有空格
H,()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令
例子:
$ var=test
$ (var=notest; echo $var)       ###变量var值为notest,此是在子shell中有效
notest
$ echo $var        ###父shell中值仍为test
test
$ { var=notest; echo $var;}     ###注意左括号和var之间要有一个空格
notest
$ echo $var                     ###父shell中的var变量的值变为了notest
notest
$ { var1=test1;var2=test2;echo $var1>a;echo $var2;}
###输出test1被重定向到文件a中,
test2                ###而test2输出则仍输出到标准输出中。
$ cat a
test1
$ { var1=test1;var2=test2;echo $var1;echo $var2;}>a
###括号内命令的标准输出全部被重定向到文件a中
$ cat a
test1
test2


ulimit使用简介

--------------------------------------------------------------------------------


1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes



深刻理解重定向:
echo tser | tee  >(tr t T) >(tr s S)  >(tr e E) >(tr r R)
#上面一条语句的输出结果不定。
(ls yes.txt 2>&1;ls no.txt 2>&1) >&2|egrep \* >file
#在命令执行前,先要进行重定向的处理,即把子shell的stdout连到egrep的stdin
#此时子shell的stderr仍然是连到monitor的
#在 () 中的两个命令可以看作一个命令,其stdout(FD1)通过“|”作为egrep的stdin
#在()内将两个命令的FD2转到FD1(即作为egrep的stdin),但是在()外
#通过 >&2 将()的标准输出送到了stderr,即monitor

(ls yes.txt 2>&1;ls no.txt 2>&1) 2>&1|egrep \* >file
#stdout和stderr都通过管道送到egrep的stdin

中阶例子(其中 you 这个文件是存在的,no 和 wu 这两个文件不存在)
要求:stderr通过管道送给egrep,正确消息仍然送给monitor(不变)
exec 4>&1;(ls you no 2>&1 1>&4 4>&-;ls wu 2>&1 1>&4 4>&-)|egrep \* >file
exec 4>&-
或者
exec 4>&1;(ls you no;ls wu) 2>&1 1>&4 4>&-|egrep \* >file;exec 4>&-

要求:
stderr通过管道送给egrep,正确消息仍然送给monitor
要求cmd1和cmd2并行运行
将cmd1的返回值赋给变量 ss
命令
exec 3>&1;exec 4>&1
ss=$(((ls you no 2>&1 1>&3 3>&-;echo $? >&4)|egrep \* >file) 4>&1)
exec 3>&-;exec 4>&-
#解析:
#(ls you no 2>&1 1>&3 3>&-;echo $? >&4)
#这条命令首先会继承FD0、FD1、FD2、FD3、FD4,它位于管道前,所以在运行命令前会先把子shell自己的FD1和管道|相连
#通过2>&1,把 子shell的FD1的管道“送给”FD2,于是子shell中的stderr送往管道“|”;
#通过1>&3,把以前的“硬盘备份”恢复给子shell的FD1,于是子shell中的FD1变成送到monitor了
#通过3>&- ,将3关闭
#echo $? ,本来其输出值应该送往管道的,通过 >&4 ,将 输出 送往“草稿纸”FD4,留以备用
#
#((ls you no 2>&1 1>&3 3>&-;echo $? >&4)|egrep \* >file)
#于是,stderr 通过管道送给 egrep ,stdout 送给monitor
#(((ls you no 2>&1 1>&3 3>&-;echo $? >&4)|egrep \* >file) 4>&1)
最后的 4>&1 ,就是把FD4 重定向到 FD1。但由于其输出在 $()中,其值就赋给变量ss了

I/O 重定向高级例子:
对于命令 cmd1, cmd2, cmd3, cmd4. 如何利用单向管道完成下列功能:
1. 所有命令并行执行
2. cmd1 和 cmd2 不需要 stdin
3. cmd1 和 cmd2 的 stdout 定向到 cmd3 的 stdin
4. cmd1 和 cmd2 的 stderr 定向到 cmd4 的 stdin
5. cmd3 的 stdout 定向到文件 a, stderr 定向到屏幕
6. cmd4 的 stdout 定向到文件 b, stderr 定向到屏幕
7. cmd1 的返回码赋给变量 s
8. 不能利用临时文件

exec 3>&1; exec 4>&1
my_value=$(((((cmd1 1>&3 ; echo $? >&4 )| cmd2 ) 3>&1 | cmd3 >a 2>&3 ) 2>&1 |
cmd4 >b ) 4>&1)
exec 3>&-; exec 4>&-

解释:
第一对括号到第一个管道:(cmd1 1>&3 ; echo $? >&4 )|
cmd1本身没有stdin,其stdout原要送往第一个管道,由于1>&3的作用,其stdout被送往FD3;而
>&4 的作用实际是将 cmd1 运行后的返回码送往
>FD4。cmd1的stderr默认等待下一步处理。最后,没有往管道送任何东西;

第二对括号到第二个管道:((cmd1 1>&3 ; echo $? >&4 )| cmd2) 3>&1|
由于第一个括号中cmd1的 stdout 被送往 FD3,导致管道左端没有任何输入,cmd2
从而就没有stdin。cmd2 的stdout则为默认的;
将第二对括号看出一个命令,其所有的stdout送往第二个管道“|”;同时由于3>&1的作用,原先cmd1的
stdout在送往FD3 又与cmd2的stdout并到一起,所以cmd1 和 cmd2 的 stdout
都送往第二个管道“|”。而cmd1、 cmd2的stderr仍然默认等待下一步处理;

第三对括号到第三个管道:(((cmd1 1>&3 ; echo $? >&4 )| cmd2 ) 3>&1 | cmd3 >a
2>&3 ) 2>&1|
cmd3 >a 2>&3:cmd3接收处理来自管道的stdin后,其 stdout 送给文件a,其
stderr送往FD3,由于FD3继承FD1,实际上其stderr是送往monitor。如果没有“2>&3”,那么cmd3的
stderr就会干扰cmd1和cmd2的错误输出,所以它是必须的;
将第三个括号里完全看作一个命令,其stdout送往管道
“|”,由于2>&1,于是stderr也送往着管道。但由于cmd1、cmd2的stdout已经送给了cmd3处理,而cmd3的 stdout输出到文件a,cmd3的stderr也送往monitor,所以实际上只有cmd1和cmd2的stderr送往管道。

cmd4 >b:cmd4接收处理来自管道的stdin后,其stdout 定向到文件 b,stderr
默认输出到monitor。

第四对括号:( (((cmd1 1>&3 ; echo $? >&4 )| cmd2 ) 3>& 1 | cmd3 >a 2>&3 )
2>&1| cmd4 >b ) 4>&1
四对括号里面所有命令的 FD1、FD2都处理完了,但是还有“echo $?
>&4”没处理。“4>&1”的作用就是“将FD4并到stdout”,但由于其他命令的stdout都处理完了,实际上就只有
>$? 的值。
又由于 $() 会建立一个管道,输入端为()内命令,故 $? 的值被赋给变量 my_value。

最后一行是关闭FD3和FD4。
另:恢复重定向或关闭的stdout:exec 1>&2 ,恢复重定向或关闭的stderr:exec 2>
&1。如果stdout和stderr全部都关闭了,又没有保存原来的FD,可以用:exec
1>/dev/tty 恢复

通过键入set -o noclobber使>file 防止shell重写一个文件
>| 可以重载noclobber,即使设置了noclobber仍强制标准输出到file

重定向符<<有两个变体:
1.通过把label括在单引号或双引号内防止shell对输入内容进行参数和命令替换
2.<<-,从here-document和标签行中删除前导TAB(不包括空格)


bash的命令行编辑接口称为readline,有两种编辑模式:vi或emacs,
两种模式均提供在完全编辑器中的编辑命令的子集
readline默认启动文件称为.inputrc,如果希望定制readline,它必须存在于
用户的主目录
通过:man readline查看具体帮助

.bash_profile只被登录shell读取并执行
通过命令行执行bash,会读取.bashrc的内容

shopt 此内置命令替换原始的使用环境变量和set命令所完成的选项配置功能

提示符字符串定制:
\d “星期 月 天”格式日期
\e ASCII转义字符
\h 主机名
\n 回车换行
\s shell名字
\T 12小时制HH:MM:SS
\t 24小时制HH:MM:SS格式当前时间
\@ 12小时am/pm格式当前时间
\u 当前用户名
\v bash版本
\V bash发布;版本和补丁
\w 当前工作目录
\W 当前工作目录的基名
\# 当前命令的命令编号(刚执行完的那个)
\! 当前命令的历史编号
\$ 有效ID为0打印#,否则打印$
\nnn 八进制字符编码
\\ 打印一个反斜线
\[ 开始非打印字符的序列,如中断控制序列
\] 结束非打印字符序列

命令缓存:hash命令
给出缓存中的命令还有当前登录会话期间被执行的次数
hash -r 清空缓存
hash -p 加入命令到hash表
set hashall 打开或关闭命令缓存

设置CDPATH=:~/ForInstall
执行 cd php时,首先在当前目录查找php目录,没有则到~/ForInstall目录下查找

在FC3中TERM数据库位于:/usr/share/terminfo目录

type 可以查看命令的类型和路径

当在shell脚本中定义了function,则function持有自己的位置参数(除$0)
$0始终是shell脚本的文件名
function内的变量不用local进行声明的,均为全局变量

$*使用IFS的第一个字符进行分隔
例:以逗号分隔位置参数
    IFS=,
    echo "$*"

当需要在函数内调用同名内置命令时,可以使用:builtin
因为函数比大部分内置命令优先级高,builtin告诉shell使用内置命令并忽略该
名字的任何函数

-a,-o只在test表达式内可用
例:if [ -n "$dirname" ] && [ \( -d "$dirname" \) -a \( -x "$dirname" \) ]

crontab 只有三个环境变量:SHELL、HOME、USER
通过crontab运行的程序用ps -A查看

: #空操作
会返回true,常作为占位符placeholder
:${username=`whoami`}
#${username=`whoami`} 前面没有冒号会报错
配合重定向可以把一个文件截断,但不改变原有权限,文件不存在则创建
: >data.xxx # File data.xxx now empty. Not pipes,symlinks,and certain special
# Same effect as cat /dev/null >data.xxx
# However, this does not fork a new process,since ":" is a builtin.

The parent process cannot read variables created in the child process

No spaces allowed within the braces unless the spaces are quoted or escaped.
echo {file1,file2}\ :{\ A," B",' C'}
output:file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

The code block enclosed in {} may have I/O redirected to an from it.

{}\; pathname. Mostly used in find constructs. This is not a shell builtin.

A pipe runs as a child process, and therefore cannot alter script variables.

- redirection from/to stdin or stdout [dash].
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar zxvf - )
# Move entire file tree from one directory to another
# 先把源目录下内容压缩到标准输出,通过重定向输出到后面命令的标准输入
# 后面的tar通过-从标准输入读入压缩包,并解压缩
file -


快速安装LINUX大约十分钟(所有X86下安装):【上一篇】
ssh 使用新法:公网(合法 ip)用户访问内网(私有 ip)服务器(http,ftp,sshd,c:【下一篇】
【相关文章】
  • shell命令
  • test conditions provided by the shell(摘要)
  • shell脚本编写问题,`和'的区别使用
  • 用shell写网页时遇到的问题
  • shell颜色控制相关资料
  • 第三章 shell的输出与输入
  • Unix编程/应用问答中文版 ---20.shell script问题
  • SHELL十三问之六:exec 跟 source 差在哪?
  • SHELL十三问之七:( ) 与 { } 差在哪?
  • 一个自动重新启动无故退出程序的shell脚本
  • 【随机文章】
  • 数组越界不等于异常
  • 2-10英尺屏蔽跳线
  • 真难!
  • 你未必知道的CSS技巧
  • 定义一个动态的二维数组?
  • MLC认证专题介绍
  • Raw Socket(原始套接字)实现Sniffer(嗅探)
  • 模拟打印的演示控件
  • 文字编码(unicode,utf,gb,iso,big5)
  • 如何实现将vsflexgrid中修改的数据反馈到数据库中
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.