Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4262257
  • 博文数量: 601
  • 博客积分: 15410
  • 博客等级: 上将
  • 技术积分: 6884
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 08:11
个人简介

独学而无友,则孤陋而寡闻!

文章分类

全部博文(601)

文章存档

2020年(1)

2018年(4)

2017年(7)

2016年(42)

2015年(25)

2014年(15)

2013年(36)

2012年(46)

2011年(117)

2010年(148)

2009年(82)

2008年(37)

2007年(41)

分类: Python/Ruby

2011-02-24 10:17:37

1、变量:
  单引号和双引号的区别
  引用时如果跟字符串混用,可以用{}标示出,ab='ddd'    echo abc${ab}cd
    等号两边不能有空格

2、目录名和文件名
  dirname /usr/local/etc/php.ini     结果:/usr/local/etc
    basename /usr/local/etc/php.ini    结果:php.ini

3、命令替换:
  (1)用反单引号引起来,如:echo `ls /usr`显示的是ls的结果。
  (2)用$(command)的形式,如:cm=$(ls /usr)   echo $cm

4、通配符:
   *和?跟DOS相同,[]跟perl相同
 sh启动选项:echo $-

5、“;”命令分隔符,在一行使用多个命令;
  “;;”为终止case选项;
  “.” 为执行一个命令,等价于source命令;
  “#” (1)注释;(2)替换
  “?” (1)通配符;(2)替换
  “`” (反单引号)后置引用,命令替换
  “,” (逗号)链接一系列复核操作,逐项执行,但只有最后一个返回。
      a2=(a1=9,a3=8,4*3) 则a2=12
  “:” 空命令,等价于ture
  “!” 取反
  “**” 幂操作
  “${}” 参数替换
  “$*和$@”位置参数
  “$?”  退出状态变量
  “$$”  进程ID变量
  “()”  命令组,注意在子shell中操作,环境变量不能传递
  “{a,b,c}” 大括号扩展????
  “{}” 代码块,跟()不同,不开启新的shell
  “[[]]” 测试结构???
  “(())” 数学计算结构扩展
  “>& &> <>” 重定向??
  “-” 重定向stdin或stdout
  “~+”当前目录,相当于pwd
  “~-”之前的工作目录,相当于$OLDPWD
  “”
6、变量替换:
  (1)a="a b  c   d";echo $a; echo "$a"
    前一个将多余空格合并,后一个显示所有空格。
  (2)let可以用来给变量赋值

7、命令行参数:
   $0本身,$1:第一个参数…… $9, ${10},10以后要带大括号。
  位置可以用ar=$1;lastarg=${!args} ????
  在调用空参数的时候,会引起空变量错误,可以在相关变量后加一个额外字符
  shift用来将参数位置向左移动一个
  $@和$*,在soft quote中,$@不拆分字符串,而$*则拆开,
       如a.sh a "b c" d ,前者得到三个,后者得到四个。
  
8、\转义,也提供了续行功能

9、if ...then...elif...then...else...fi
   
10、文件测试:
  -e 文件存在
  -f file 普通文件(不是目录或者设备文件)
  -s 文件长度不为0
  -d 文件是个目录
  -b 文件是个块设备(软盘,cdrom 等等)
  -c 文件是个字符设备(键盘,modem,声卡等等)
  -p 文件是个管道
  -h 文件是个符号链接
  -L 文件是个符号链接
  -S 文件是个socket
  -t 关联到一个终端设备的文件描述符
    这个选项一般都用来检测是否在一个给定脚本中的stdin[-t0]或[-t1]是一个终端
  -r 文件具有读权限
  -w 文件具有写权限
  -x 文件具有执行权限
  -g set-group-id(sgid)标志到文件或目录上
  -u set-user-id(suid)标志到文件上
  -k 设置粘贴位
  -O 文件的所有者.
  -G 文件的group-id 和你的相同.
  -N 从文件最后被阅读到现在,是否被修改.
  f1 -nt f2  文件f1 比f2 新
  f1 -ot f2  f1比f2 老
  f1 -ef f2  f1和f2 都硬连接到同一个文件.

11、-gt和>,都是大于,但是>需要双括号(()) 
  -eq 等于    -ne 不等于  -gt 大于
  -ge 大于等于  -lt 小于   -le 小于等于
  -z 字符串为NULL,  -n 字符串不为null
  if [ -n $a ] ... 在$a没有初始化的时候会出错,可以用if [ -n "$a" ]
      也可以用 if [ $a ]
  
  在Shell中,要注意三种条件的比较不相同:字符串类型用=之类,数值用eq之类,文件用-e

12、条件与和或
    if [ $con1 ] && [ $con2 ]
    if [ $con1 ] || [ $con2 ]
 可以用-a代表and,-o代表or:if [ -d "$file1" -a -d "$file2" ],必须两个目录同时存在

13、内建变量:$IFS,来决定域和单词边界

14、字符串操作
  (1)索引: expr index $string $substring
  (2)提取子串: ${string:position:length},如果$string为*或@,则用位置参数
  (3)子串削除: ${string#substring}和${string##substring} 注意:变量不要带$号
  (4)从右端开始:${string%substring}和${string%%substring}
  (5)第一次字符串替换:${string/substring/replacement}
     全部匹配替换:   ${string//substring/replacement}
     开头部分匹配替换:${string/#substring/replacement}
     结束部分匹配替换:${string/%substring/replacement}
  (6)字符串长度:${#str}

  
15、参数替换
  (1)设置默认值:${var-string}或${var:-string},只返回,不给var赋值
  (2)${parameter=default},${parameter:=default} 默认值,同时给var赋值
  (3)${parameter+alt_value},${parameter:+alt_value} 替代值
  (4)${parameter?err_msg}, ${parameter:?err_msg} 没有设置则提示出错信息

16、数组
  (1)${arr[@]}或${A[*]}全部数组
  (2)${arr[0]}为第一个数组
  (3)${#arr[@]}或${#arr[*]}为数组长度
  (4)${$arr[1]}第二个数组的长度(数组下标从零开始)
  (5)赋值:a="a b c def",则a为字符串;a=(a b c def),则a为四个成员的数组

17、数学运算
  (1)$(())格式,括号里的变量前可以不加$号
  (2)$((16#3f)),显示16进制的3F
  (3)

18、标准输入、输出及错误信息
  (1)echo abc.txt >abc.out >abc.err 第一个重定向给了标准输出,第二个重定向给了标准错误
  (2)2>&1,是将标准错误导进标准输出;1>&2是将标准输出导进标准错误
          echo abc.txt 1>file.txt 2>&1
  (3)其实不指定序号的重定向是标准输出echo abc.txt >file.txt = echo abc.txt 1>file.txt
  (4)在同时有输入和输出的情况下,stdout和stderr会比stdin更早,


阅读(1006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~