072011
 

第五部分 高级Shell编程技巧

二十五、<< 的更多用法

使用:
    cat >> newfile << TAG
    Hello, everyone! 
    It's rainy outside.
    TAG
可以快速的将一段话放入新建立的一个文件,本例中为newfile。

如果一个脚本,按次序依次接收一些参数,那么可以用<<实现自动化输入:
    /usr/bin/my-own.sh << MAYDAY
    1
    3
    2
    MAYDAY

二十六、Shell工具与trap信号

日期时间函数date,date +%格式" "%格式。。。
    %d Day
    %m Month
    %y 两位数年份
    %Y 四位数年份
    %A 星期几
    %R 12:01
    %T 12:01:49

信号
    1    SIGHUP    挂起或父进程被杀死    Ctrl+D或exit命令
    2    SIGINT    键盘中断   Ctrl+C
    3    SIGQUIT   从键盘退出
    9    SIGKILL   无条件中止
    11   SIGSEGV   段(内存)冲突
    15   SIGTERM   软件终止(缺省杀进程)
可以使用kill -信号号码 pid 杀进程
    或者kill -s SIGKILL pid

使用trap捕捉信号
    trap "command" SIG1 SIG2 …
    其中command是捕捉到信号后要执行的函数名称,SIG1是指要捕捉的信号数字。
        特例,只捕捉不处理:trap "" 2 3
        特例,取消信号捕捉:trap 2 3

Continue reading »

062011
 

第四部分 基础Shell编程

十六、Shell脚本介绍

增加脚本执行权限,用 chmod u+x name.sh

执行脚本,使用 ./name.sh

十七、条件测试

测试一些条件,返回结果储存在 $? 中。测试条件,来实现一些分支判断。

使用test命令,或者[空格 命令 空格]来执行测试
    文件测试的选项有:
        -d 文件夹
        -f 普通文件
        -L 链接文件
        -r 可读
        -w 可写
        -x 可执行
        -s 非空文件
        例如$ [ -w myfirstc.c ]
                $ echo $?
                0
    逻辑连接两个测试:
        -a 与运算,如[ -w file1 -a -w file2 ]
        -o 或运算,如[ -r file1 -o -r file2 ]
        !  非运算,如[ ! -w myfirstc.c ]

Continue reading »

032011
 

第三部分 登录环境

十三、基本登录环境

用户和登录信息保存在/etc/passwd文件中,现代的Unix系统,密码常以MD5形式储存在/etc/shadow中。
    /etc/passwd的格式
    登录名 密码 用户id 组id   用户全名  主目录      使用的Shell
    sean  :x  :1000  :1000 :seanluo :/home/sean :/bin/bash

配置文件 /etc/profile 保存的是全局或局部环境变量、PATH信息、终端设置、安全命令如umask和其他信息。

配置文件 $HOME/.profile 保存的是用户配置信息,PS1和PS2可以设置提示符的信息。

stty用于设置终端特性,使用stty -a可以查看当前终端配置。

十四、环境信息和Shell变量

定义变量
    最基础的可以使用 VAR_NAME="value" 的形式,注意等号两端不能有空格,否则将被shell理解为命令。
    扩展的检测和定义变量的方式有:
         ${var_name:=value}    如果未设置变量,则设置其值为value。
                 注意与下面var_name:-value的区别。
         
${var_name:+value}    如果设置了变量,则重设其值。如没有设置,则返回空串。
         ${var_name:-value}    如果未设置变量,则在表达式中出现变量时使用value,
              但是并不改变var_name的未设置的状况。注意,仅仅是临时使用value这个值而已。 
         ${var_name:?info}    如果未设置变量,则显示用户自定义的出错信息。

Continue reading »

022011
 

十、sed命令的使用

sed是stream editor的缩写,它是一个非交互式的流文件编辑器。一般适用于按行操作文本的情况。
它的用法是
    sed [选项] '[基本命令]模式[基本命令]' 输入文件

sed 的一些选项
    -n 只打印匹配行,如不指定,则默认打印所有行。
    -f 从一个sed脚本文件获得指令
    -e 使用多个命令,如
        sed -n -e '/music/p' -e '/music/=' a.txt 其中第一个命令打印匹配行,第二个打印行号。

sed的模式
    和一般模式相比,sed多了关于行号的匹配方式,数字即代表了行号,$代表最后一行。
        所以'1,$p'表示打印第一至最后一行;'3p'表示打印第三行。
    要匹配一般的模式,要用斜线括起来,'/never/p'
    混用行号和模式的情况
        x                 x为一行号,如1

Continue reading »

012011
 

第二部分 文本过滤

七、Unix下的正则表达式

Unix下的正则表达式居然并不统一,这让我感到很困惑,似乎不同的命令中正则表达式的格式还不相同,或许是我接触的还是太少吧,这个问题以后再考略一下。这里先简单写写。

^               只匹配开头
$               只匹配结尾,特殊的:^$匹配空行
*               该字符前的模式重复0到多次
+               该字符前的模式重复1到多次
?               该字符前的模式重复0或1次
[]              表范围,如[a-zA-Z]或[1-5]等
[^pattern]      表不匹配该模式,如[^a-zA-Z]匹配非字母型字符
\               转义字符
.               表单个任意字符
pattern\{n\}    该模式重复恰好n次,加反斜线是为了{}的正常使用
pattern\{n,\}   该模式重复至少n次
pattern\{n,m\}  该模式重复n到m次

Continue reading »

292011
 

为了浮云,关于ARM9的学习先暂停一下。其实课程还在继续,只是最近有了新的目标。

第一部分 Shell

一、文件和权限

文件类型
  -  普通文件
  l  链接文件
  d  目录文件
  p  管道文件
  s  套接字文件
  b  块设备文件
  c  字符设备文件

文件权限
  -rwxrwxrwx    文件类型,文件属主权限,文件属主缺省组权限,其他用户权限
  权限:r 读(04)  w  写(02)  x  执行(01) s 表示粘滞,通常意味着文件放在swap分区
  chmod  更改文件权限,chmod u+x g-w o-r filename 属主增加执行权限,组去除写权限,其他用户去除读权限
  也可用上面的八进制数代替,rwx 为7,rw- 为6,r– 为4,r-x 为5
  目录的权限优先于文件的权限,可以使用 chmod -R 递归操作目录
  chown  更改文件属主
  chgrp  更改文件属组
  umask  权限掩码命令 umask 0022 意味着拿走缺省组和其他用户的w权限 Continue reading »