吉行天下, 力挽狂澜

----------吉豕皮, 力一女共筑----------
随笔 - 35, 文章 - 2, 评论 - 3, 引用 - 0
数据加载中……

shell编程积累

写shell也有好几个月了,趁现在有时间,将一些东西整理到这里:
1. 测试文件状态
    test condition
    [ condition ]
    -d    目录
    -f      正规文件
    -L     符号连接
    -r      可读
    -s      文件长度大于0, 非空
    -w     可写
    -u       文件有suid位设置
    -x       可执行

   逻辑操作符:
    -a 逻辑与
    -o 逻辑或
    !  逻辑否,条件为假,结果为真


2.查找与替换:
     :1,$s/p1/p2/g
     将p1 用p2替换
 
     :s/p1/p2/g
     将当前行中的p1用p2替换

    g/p1/s//p2/g
    将文件中所有的p1均用p2替换

    去掉换行符^M
    :1,$ s/^M//g    (ctl+v ctl+m)

3.几个shell中常用命令
    basename用于从路径中分离出文件名
    dirname 用于从路径中分离出纯路径部分
    compress用于压缩文件 -v 显示压缩结果 压缩成.z格式文件
    diff dir1 dir2 用于比较两个目录下文件的不同 -s 不显示相同文件
    du 用于显示目录占用的空间 -a 显示每个文件大小 -s显示总计,大小均以512字节的块表示
    file 用于确定文件或目录类型
    fuser用于显示访问某个文件或文件系统的所有进程
                  -u  用于显示访问某个文件或文件系统的所有进程
                  -k 杀死所有访问该文件或文件系统的进程
    logname 显示登录名
    wc 显示文件大小 
                 -c显示字符数
                 -l显示行数
                 -w显示单词数

    date + %d-%m-%y (09-06-06)
    date + %R (10:07)
    date + %A" "%R" "%P (Wednesday 10:09 AM)
    date + %T

   添加目录
   cvs add dir_name

   查看修改历史
   cvs log file_name
   cvs history file_name


4. 常用语法
   字符串的测试
   字符串操作符:
       =   两个字符串相等
       != 两个字符串不等
       -z  空串
       -n  非空串

   测试数值
   数值操作符:
       -eq 数值相等
       -ne 数值不等
       -gt 第一个数大于第二个数
       -lt 第一个数小于第二个数
       -le 第一个数小于等于第二个数
       -ge 第一个数大于乖于第二个数

   expr使用
      expr argument operator argument
      操作符和参数之间必须有空格
          expr 10 + 10
          expr 30 / 3
          expr 30 \* 3
 
          $LOOP=1
          $LOOP=`expr $LOOP + 1 `

       流控制
      if condition1
   then
    command1
   elif condition2
   then
 comand2
   else
 command3
   fi
使用if 语句时必须将then 放在新行,如果一定要和if放在同一行,if语句须用分号分隔

   case variable in
   pattern1)
 command1
 command2
 ;;
   pattern2)
 command3
 command4
 ;;
   esac
取值后面必须为单词in,每一模式必须以右括号结束,取值可以为变量或常数,若无匹配模式,以*号捕获该值,再接受其它输入。
 * 任意字符
 ?任意单字符
 [..]类或范围中任意字符
模式匹配:
        y|y|yes|Yes)
 

for循环:
for variable in List
do
 command1
 command2
done

在for循环中省去in List列表选项时,实际上是指:
for params in "$@"或
for params in "$*"

until condition
do
 command1
 command2
done

while condition
do
 commnad1
 commnad2
done


5.脚本调试
set命令
set -n 读命令但并不执行
set -v 显示读取的所有行
set -x 显示所有的命令及参数

6.cut用法
我们经常会遇到需要取出分字段的文件的某些特定字段,例如 /etc/password就是通过":"分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段

当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段

posted on 2006-09-29 10:41 吉豕皮 阅读(250) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。