Chinaunix首页 | 论坛 | 博客
  • 博客访问: 386290
  • 博文数量: 124
  • 博客积分: 2911
  • 博客等级: 少校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 15:57
文章分类

全部博文(124)

文章存档

2012年(6)

2011年(26)

2010年(92)

我的朋友

分类: Python/Ruby

2010-09-30 14:09:28

1.命令2【命令1结果】的实现?
  A: CMD2 `CMD1`
2.
  有两种方法执行shell scripts
  1)一种是新产生一个shell执行相应的shell scripts:即在脚本处加入 #!/bin/sh
  2)在当前shell下执行:即用source命令
    source命令在当前进程中执行参数文件中的各个命令,而不另起子进程(sub-shell)
    exec命令在执行时把当前的shell process关闭,然后换到后面的命令继续执行。

                                            ==========
                                            ||**Shell基础**||-->数据成分:变量、数组。。。
                                            ==========
/**********************************************************************************************************************************************/
一、环境变量(皆可echo)

    PS1            主提示符。对root来说是#;对普通用户是$
    LOGNAME    登录用户名
    UID            当前用户UID

    HOSTNAME    //主机名
    HOME        //家目录
    HOSTTYPE    //主机架构:x86_64,i386....
    PWD            //当前目录
    PATH

    TERM
    SHELL
    MAIL
/**********************************************************************************************************************************************/
二、位置变量(参数)
    $0    脚本名
    $1    第一参数名
    ....
    $9    第9参数名

    shift命令
    功能:左移位置参数
    i.e.:
        echo $0 $1 $2...$9
        shift                    //左移一次
        echo $0 $1 $2...$9
        shift 2                //左移2次
        echo $0 $1 $2...$9
/**********************************************************************************************************************************************/
三、特殊变量
    $?    最近一次shell执行后的退出状态码,十进制。一般命令执行成功返回0。
    $#    位置参数个数
    $$    当前进程PID

    $*    所有位置参数组成的字符串,类似 char *
    $@    作用同上,不过组成的字符串类似 char [n]
    $!    上一个后台命令对应的进程号
/**********************************************************************************************************************************************/
四、普通变量
    1.大小写敏感
    2.赋值:
        2.1【方式一】
            变量名=变量值。
            2.1.1    “=”前后不能有空格。
            2.1.2    包含空格的变量值:应该使用双引号“”。
            2.1.3    算数处理要用let。i.e.: let cout=2+3; echo count;        //打印出5,否则打印出2+3
        2.2【方式二】
            read    +变量名:    相当于scanf。Shell等待键盘输入,将值赋予变量。
                        当输入的值个数多于变量个数,多余的数据将全部赋予最后一个变量。
            echo    +变量名:相当于printf。
        2.3【方式三】
            变量=`cmd`:    cmd的执行结果赋予变量。
            变量=$(cmd):    同上。
                ——此时使用 echo“$变量” 可将结果中的换行符打印出来。
        2.4【方式四】
            从文件读入数据。i.e(从文件中一次读取一行进行操作):
                ls > Var                #当前文件夹下生成Var文件
                while read LINE        #while...do...done结构
                do
                    chmod +x $LINE    #对每行($LINE)的具体操作
                done
    5.删除:unset + 变量名
/**********************************************************************************************************************************************/
五、数组变量

/**********************************************************************************************************************************************/
                                            ==========
                                            ||**Shell**||-->控制成分:逻辑判断、条件、循环。。。
                                            ==========
/**********************************************************************************************************************************************/
                                                一、逻辑判断
    1.文件判断
        -option file    成立则返回真
        -option:
            -e        存在
            -f        普通文件
            -s        文件长度!=0
            -d        目录
            -b        块设备(Floppy/cdrom...)
            -p        FiFO文件
            -h        符号链接
            -r        当前用户对文件具有读权限
            -w        。。。。。。。。。写。。
            -x        。。。。。。。。。执行。
            -O        当前用户是文件的所有者
            -nt        file1比file2新
            -ot        file1比file2旧
    2.数值比较
            -eq        等于
            -ne        不等于

            -gt        大于
            -ge        大于等于

            -lt        小于
            -le        小于等于

            <        #要放入双引号中
            <=        #要放入双引号中
            >        #要放入双引号中
            >=        #要放入双引号中
    3.字符串比较
            -z        字符串为空
            -n        字符串不为空
            =        等于
            ==        等于
            !=        不等于.注意:前后都要有空格
            <        小于        #在[]中要用转义符“\“,在[[]]中不需要转义符。
            >        大于        #在[]中要用转义符“\“,在[[]]中不需要转义符。
    4.逻辑运算符
            -a        “与”        类似    & 或 &&
            -o        “或”        类似    |  或 ||
            !        “非”        类似    ~ 或 not
/**********************************************************************************************************************************************/
                                                二、条件语句
2.1    If语句
        if [...] ; then
            ....
        elif [...] ; then
            ...
        else
            ...
        fi

2.2    Case语句
        case ... in
            mode1.1|mode1.2 )
                expression
                ;;
            mode2.1... )
                expression
                ;;
            ........
            *)
                expression
                ;;
        esac

2.3    Select

        select 变量 in 列表
        do
            expression
        done
注:使用break 可以退出select人机交互
注:break与continue的意义同C语言
/**********************************************************************************************************************************************/
                                                三、循环语句

3.1    While
        while [expression]
        do
            expression
        done            //done后亦可有Expression
        
        e.g.:
                #!/bin/bash
num=1
while [ 20 -gt $num ]
do
URL="xxx"
wget $URL
num=$(($num+1))
sleep 2
done
3.2    For

        for 变量 [ in 列表]
        do
            Expression
        done
注:for随着列表元素取完而停止

3.3    Until
        until
            expression1
        test    expression
        do
            expression2
        done
/**********************************************************************************************************************************************/
                                            ==========
                                            ||**Shell**||-->运算成分:算数操作符
                                            ==========
/**********************************************************************************************************************************************/
一、普通算数操作符
    +    加
    -    减
    *    乘
    /    除
    %    取模
    **    幂运算
/**********************************************************************************************************************************************/
二、自操作运算符
    +=
    -=
    *=
    /=
    %=
/**********************************************************************************************************************************************/
                                            ==========
                                            ||**Shell**||-->函数
                                            ==========
1.定义
        a)最简洁形式:    函数名{...}
        b)完整形式:    function 函数名(){.....; ....; return}
注:
        a) return:函数返回
        b) exit:    退出当前脚本
        c)
            declare -f        显示定义的函数清单
            declare -F    显示定义函数名列表
            export -f        将函数输出给Shell
            unset -f        从Shell内存中删除函数
2.调用
    1)本地调用
        a)将函数定义在 .bash_profile 中。直接命令行调用。
        b)sh脚本中定义、调用。
    2)脚本间调用
        使用其他脚本中的函数,通过“source”或“.”命令把其他脚本装入内存。
3.参数
        只有位置变量可以传递参数。
4.变量作用域
        a)函数内部使用local关键字定义局部变量。
        b)非local定义的变量在脚本的全局范围内有效。
5.返回值
        a) return:可以返回0~256之间的任意值到主程序调用处。
        b) 返回值保存在主程序接续的$?中。
        c) 不指定return的返回值,则返回最后一条被执行命令的退出状态值。
6.
    a) Shell支持函数嵌套:可在函数A中定义并调用B函数。
    b) 支持递归
/**********************************************************************************************************************************************/
                                            ==========
                                            ||**Shell**||-->其他
                                            ==========
/**********************************************************************************************************************************************/
一、重定向
    cmd    >    file        cmd的输出重定向到file
    cmd    >>    file        cmd的输出追加到file的末尾
    cat    >    file        stdin重定向到file
    cmd    <    file        file作为cmd的stdin

>/dev/null 2>&1
    将stdout和stderr合并输出到/dev/null,忽略输出。可以当作注释写法。
    /dev/null:            空设备文件
    1:                文件描述符1;1代表STDOUT_FILENO
    2:                文件描述符2;2代表STDERR_FILENO
    0:                键盘输入
    &:                等同于
    >/dev/null        ="1>/dev/null":将标准输出(fd=1)重定向到空设备文件。
    2>&1            标准错误(fd=2)等同于fd=1重定向到1的重定向设备中。
注:command >file 2>&1
    将stdout直接送向file,stderr继承fd1的管道,被送往file。
    整个过程file只被打开一次,只使用了一个管道FD1,但包括了stdout和stderr的内容。
/**********************************************************************************************************************************************/
二、通配符
?        匹配任意单个字符
[]        匹配[]字符集中的单个字符
[$1-$n]    匹配[]中的连续数字/字符范围(1-n)
*        匹配任意长度字符
{$ , $}    匹配{}中的各个字符串

/**********************************************************************************************************************************************/
三、Source命令/点命令
. ./xxx.sh    <=>   source ./xxx.sh
    (1)source是在当前bash环境下执行file。通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
    (2)source a.sh 同直接执行 ./a.sh 有什么不同呢?
        比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,
        如果你用source来执行 ,然后再echo ,就会发现KKK=111。
    因为调用./a.sh来执行shell是在一个子shell里运行的,执行后结构并没有反应到父shell里,但source是在本shell中执行的,所以可以看到结果
/**********************************************************************************************************************************************/
四、echo格式
        -n 不输出最后的\n
        -e解释转义字符
        -E不解释转义字符
/**********************************************************************************************************************************************/
五、
/**********************************************************************************************************************************************/
六、测试空变量
if [ X "$aa" = X ];then
    echo "aa is empty!"
fi
七、自增 i++、自减 i--
tmp=100
tmp=$(($tmp-1))
八、true
冒号(Shell内建指令)=true
:  ${JOBS:=}
    : 空命令,什么也不做。但 ${JOBS:=} 会被当作 : 命令的参数进行解析。
九、cut
1.处理格式
    cut [-opt] [domain] [file]
2.参数
  -opt:
    -b    //:byte,以字节(8位二进制位)来计算输出
    -c    //:character,以字符为单位输出
    -f [-d delim][-s] [file]  //:field
    -n    //与-b同时使用。告诉cut输出时不分割多字节字符。
  #subPara:
    -d    分隔符(delimiter).默认为TAB
    -s    表示不包括那些不含分隔符的行(有利于去掉注释和标题)

3.Domain:
    N    只有第N项
    N,M  第N项与第M项
    N-   从第N项一直到行尾
    N-M  从第N项到第M项(包括M)
    -M   从一行的开始到第M项(包括M)
    -    从一行的开始到结束的所有项
4./*PMP*/
[
rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cat cut_ch.txt | cut -b 3
阅读(1057) | 评论(0) | 转发(0) |
0

上一篇:Linux_Instl_HardDisk

下一篇:Linux_CMD

给主人留下些什么吧!~~