Shell十三问学习笔记


Shell十三问学习笔记
 
1. echo 命令所支持的反斜线控制字符如下表:
\a:ALERT / BELL (从系统喇叭送出铃声)
\b:BACKSPACE ,也就是向左删除键
\c:取消行末之换行符号
\E:ESCAPE,跳脱键
\f:FORMFEED,换页字符
\n:NEWLINE,换行字符
\r:RETURN,回车键
\t:TAB,表格跳位键
\v:VERTICAL TAB,垂直表格跳位键
\n:ASCII 八进位编码(以 x 开首为十六进制)
\\:反斜线本身
 
2. 常用meta
IFS:由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space )。
CR: 由 <enter> 产生。
 
3. 除了IFS与CR,常用的meta还有:
=  :设定变量。
$  :作变量或运算替换(请不要与 shell prompt 搞混了)。
>  :重导向stdout。
<  :重导向stdin。
|  :命令管道。
&  :重导向file descriptor,或将命令置于后台执行。
() :将其内的命令置于nested subshell执行,或用于运算或命令替换。
{} :将其内的命令置于non-named function中执行,或用在变量替换的界定范围。
;  :在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
&& :在前一个命令结束时,若返回值为true,继续执行下一个命令。
|| :在前一个命令结束时,若返回值为false,继续执行下一个命令。
!  :执行history列表中的命令
 
4. quoting的三种方法
hard quote:' '(单引号),凡在hard quote中的所有meta均被关闭。
soft quote:“”(双引号),在soft quote中大部份 meta 都会被关闭,但某些
则保留(如$)。
escape:\(反斜线),只有紧接在escape(跳脱字符)之后的单一meta才被关闭。
[sql] 
4.1 示例1  
[test@rhel5 ~]$ A="B C"  
[test@rhel5 ~]$ echo "'$A'"  
'B C'  
[test@rhel5 ~]$ echo '"$A"'  
"$A"  
  
[test@rhel5 ~]$ A=B\ C  
[test@rhel5 ~]$ echo "'$A'"  
'B C'  
[test@rhel5 ~]$ echo '"$A"'  
"$A"  
  
4.2 示例2  
[test@rhel5 ~]$ A="  
> B  
> C"  
[test@rhel5 ~]$ echo $A  
B C  
[test@rhel5 ~]$ echo "$A"  
  
B  
C  
# $A 时的变量没至于 soft quote 中,因此当变量替换完成后并作命令行重组时,<enter> 会被解释为 IFS ,而不是解释为 New Line 字符。
 
5. ()与{}这两对符号的差异
()将command group置于sub-shell去执行,也称nested sub-shell。
{}则是在同一个shell内完成,也称为non-named command group。
所谓function,就是用一个名字去命名一个command group,然后再调用这个名字去执行command group。
 
6. $(( ))与$( )还有${ }的区别
$( )与` `(反引号)都是用来做命令替换用(command substitution)的。在多层次的复合替换中,``须要额外的跳脱(\`)处理,而$()则比较直观。
${ }是用来作变量替换用的。
$(( ))用来作整数运算的。
 
7. ${ }的一些特异功能
详见"shell中${}的妙用 "
 
8. $$, $#, $@, $*区别?
$$: 进程ID
$#: 参数的数量
$?: 上一条命令的返回值
 
my.sh p1 "p2 p3" p4
"$@" 则可得到 "p1" "p2 p3" "p4" 这三个不同的词段(word)﹔
"$*" 则可得到 "p1 p2 p3 p4" 这一整串单一的词段。
 
9. 命令的返回值
Return Value的作用,是用来判断行程的退出状态(exit status),只有两种:
0的话为"真"(true)
非0的话为"假"(false)
 
10. &&和||
&& 与 || 都是用来"组建"多个 command line 用的:
command1 && command2:其意思是command2只有在RV为0(true)的条件下执行。
command1 || command2:其意思是command2只有在RV为非0(false)的条件下执行。
 
11. < 和 >
标准输出: 1>
错误输出: 2>
两个输出合并: 1>file.both 2>&1
输出到空设备: &>/dev/null
 
12. 管道pipe
上一个命令的stdout接到下一个命令的stdin
 
13. if与case
[sql] 
if comd1; then  
  comd2  
elif comd3; then  
  comd4  
else  
  comd5  
fi  
  
case "$1" in  
  start)  
    start  
    ;;  
  stop)  
    stop  
    ;;  
  status)  
    rhstatus  
    ;;  
  restart|reload)  
    restart  
    ;;  
  condrestart)  
    [ -f /var/lock/subsys/syslog ] && restart || :  
    ;;  
  *)  
    echo $"Usage: $0 {start|stop|status|restart|condrestart}"  
    exit 1  
esac  
13. for, while, until
[sql] 
for var; do  
  ......  
done  
  
for var in one two three four five  
do  
  echo '$var is '$var  
done  
  
for ((i=1;i<=10;i++))  
do  
  echo "num is $i"  
done  
  
num=1  
while [ "$num" -le 10 ]; do  
  echo "num is $num"  
  num=$(($num + 1))  
done  
 

相关内容

    暂无相关文章