LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1127|回复: 3

Linux shell

[复制链接]
发表于 2009-3-26 10:55:32 | 显示全部楼层 |阅读模式
-----------
Linux shell
-----------

1.chsh
        功能:实用程序,改变用户默认的登录shell,提示用户输入新shell的完整路径名.
        Bash                /bin/bash(或/bin/sh)
        Korn                /bin/ksh
        C                                /bin/tcsh(或/bin/csh)

2.echo
        echo {arg}*
        功能:shell命令,将所有参数显示到标准输出,默认在输出中追加一个换行符.

3.元字符
        >                                                        输出重定向:将标准输出写入文件
        >>                                                输出重定向:将标准输出追加到文件
        <                                                        输入重定向:从文件读取标准输入
        *                                                        文件替换通配符:匹配零个或多个字符
        ?                                                        文件替换通配符:匹配任意单个字符
        [...]                                        文件替换通配符:匹配方括号之间的任何字符
        `command`                        命令替换:替换为command的输出
        |                                                        管道符号:把一个进程的输出发送给另一个进程的输入
        ;                                                        用来组成命令序列
        ||                                                条件执行:如果前一个命令失败,执行后一个命令
        &&                                                条件执行:如果前一个命令成功,执行后一个命令
        (...)                                        组合命令
        &                                                        在后台运行命令
        #                                                        shell和程序忽略在#后面跟随的直到换行符之前的所有字符(即注释)
        $                                                        扩展变量的值
        \                                                        阻止shell对\后面的字符进行特殊解释
        <<tok                                        输入重定向:从脚本读取标准输入,直到tok标记

4.重定向
        4.1:>
                command > fileName
                功能:输出重定向,把command的标准输出写入文件fileName.
                (如果该文件不存在,shell用fileName创建该文件;如果存在,它以前的内容被覆盖.如果文件存在,但没有写权限,则发生错误.)
                (不带参数的cat将其标准输入复制到它的标准输出.)
        4.2:>>
                command >> fileName
                功能:输出重定向,把command的标准输出追加到文件fileName.
                (如果文件不存在,shell用fileName为文件名创建该文件.)
        4.3:<
                command < fileName
                功能:输入重定向,把fileName的内容作为command的标准输入,执行命令.
                (如果文件不存在或没有读权限,则发生错误.)
        4.4:<<
                command << word
                功能:输入重定向,把标准输入中直到以word开始的那一行(这一行的第一个字为word)之前的内容(不包括这一行),复制到缓冲区中,然后用缓冲区的内容作为命令的标准输入执行命令.
                (此功能几乎专门用来让shell程序(脚本)将其他命令的标准输入作为内联文本提供.)

5.文件名替换(通配符)
        *                                        匹配任何字符串,包括空字符串.
        ?                                        匹配任何单个字符.
        [...]                        匹配方括号内的任意字符,可以在一对字符间使用连字符来指定一个字符范围.
        (将字符串用单引号(撇号)或双引号括起来,可以阻止shell处理字符串中的通配符.)
        (文件名中的/符号必须显式地匹配.)

6.管道
        6.1:|
                command1 | command2
                shell能用管道(|)元字符把不同的进程连接在一起,将一个进程的标准输出作为另一个进程的标准输入.
        6.2:tee
                tee -ia {fileName}+
                功能:实用程序,复制它的标准输入到指定文件和它的标准输出.
                -a选项使输入追加到文件中,而不覆盖文件.
                -i选项忽略中断.

7.`
        功能:命令替换,用`(抑意)括起来的的命令执行后,它的标准输出插入它原来的地方,输出中的任何换行符都用空格替换.
        (将管道和命令替换结合起来能够完成一些巧妙的操作.)
        (命令替换的结果可以用做另一个命令的输入.)

8.序列
        8.1:command1; command2; command3; ...
                功能:序列,如果输入一系列的用分号隔开的简单命令或管道线,shell将从左至右依次执行,序列中的每个命令可以单独进行I/O重定向.
        8.2:&&
                功能:条件序列,如果指定用&&标记分隔的一系列命令,下一个命令只在前一个命令返回退出码0时才执行.
        8.3:||
                功能:条件序列,如果指定用||标记分隔的一系列命令,下一个命令只在前一个命令返回非0的退出码时才执行.
                (&&和||元字符和C中的对应运算符功能相同.)

9.()
        功能:组合命令,把命令放在圆括号中可以组合命令,执行它们的是一个子shell.
        (这组命令共享同一个标准输入,标准输出和标准错误通道,可以重定向,可以使用管道,就像一个命令一样.)

10.后台处理
        &
        功能:后台处理,如果在单个命令,管道线,管道线序列或一组命令之后放置一个&元字符,则会创建一个子shell把这些命令作为后台进程执行.
        (后台进程和父shell并发运行,不控制键盘.)
        (在一行中能够指定几个后台命令,命令之间要用&隔开.)

11.command > fileName &
        功能:重定向后台进程,要阻止后台进程的输出显示到终端,需要把输出重定向到文件.

12.shell程序(脚本)
        包含shell命令的文件叫脚本,在运行脚本之前,必须使用chmod实用程序先给予它执行权限,然后运行时只需输入脚本的名称即可.系统确定脚本是为哪个shell编写的检查规则:
                a.如果第一行只是一个#,那么你从哪个shell将这个脚本作为命令执行,脚本就由哪个shell解释.
                b.如果第一行是#!pathName的形式,那么脚本由可执行程序pathName解释.
                c.如果规则a和规则b都不适用,那么脚本由Bash解释.
                (如果#出现在其他行,那么直到该行结束之间的所有字符都是注释.)
                (使用".sh",".csh"和".ksh"扩展名的脚本只是为了清楚,事实上脚本可以叫任何名字,甚至可以不要扩展名.)

13.子shell
        当前shell(父进程)会在几种情况下创建新的shell(子进程)来执行一些任务:
                a.当执行组合命令时,如(ls; pwd; date),父shell创建一个子shell执行组合的命令.
                (如果命令不是在后台执行,父shell一直休眠到子shell终止.)
                b.当执行脚本时,父sehll创建一个子shell执行脚本中的命令.
                (如果脚本不是在后台执行,父shell一直休眠到子shell终止.)
                c.当执行后台作业时,父shell创建一个子shell执行后台命令.
                (父shell和子shell并发运行.)
        (子shell也叫"下级的shell",有自己的当前工作目录,在子shell中执行cd命令不会影响到父shell的工作目录.)
        (每个shell都包含两个数据空间:一个环境空间和一个局部变量空间.子shell继承其父shell的环境空间的一个副本和一个干净的局部变量空间.)

14.变量
        14.1:shell支持两种变量:局部变量和环境变量,两种变量都以字符串格式保存数据.
                当shell调用子shell时,子shell获得父shell的环境变量的一个副本,但不获得局部变量的副本.所以,环境变量常用来在父shell和子shell之间传递有用的信息.
        14.2:一些对所有shell通用的预定义的环境变量:
                $HOME                        主目录的完整路径名
                $PATH                        shell搜索命令的路径
                $MAIL                        邮箱的完整路径名
                $USER                        用户名
                $SHELL                登录shell的完整路径名
                $TERM                        终端的类型
        14.3:不同的shell给变量赋值是语法不同,但访问变量的方法是相同的.如果在变量名前加一个$符号,shell将用命名变量的值替换这个标记序列.
                要创建变量,只需给它赋一个值:变量不必声明.
                变量赋值时,在等号两边不能有空格.如,variableName=value
        14.4:几个常见的,含义特殊的内建变量:
                $$                                        shell的进程ID
                $0                                        shell脚本的名称(如果可用)
                $1...$9                        $n指向第n个命令行参数(如果可用)
                $*                                        所有命令行参数的列表

15.引用
        shell的引用机制可以禁止shell的通配符替换,变量替换和命令替换机制,其工作方式如下:
                a.'(单引号)禁止通配符替换,变量替换和命令替换.
                b."(双引号)只禁止通配符替换.
                c.当引号嵌套时,只有外层引号生效.
                (在文本周围使用单引号('),可以禁止所有的通配符,变量和命令替换;双引号只禁止通配符替换,但允许变量和命令替换.)

16.<<
        command << word
        功能:here文档,当shell遇到上述形式的序列时,将它的标准输入中直到但不包括word开始的行的内容,复制到一个shell缓冲区中,然后使用缓冲区的内容作为标准输入执行command.
        (注意word是在结束行的开始,同时应该为word选择一个合理的值,这个值不应该是可能自然出现在随后的文本中的平常文本.)
        (如果没有遇到以word开始的行,Bash和Korn shell一直复制到脚本结束,而C shell发出错误消息.)
        (被复制文本中对shell变量的所有引用都被替换为变量的值.)
        (使用<<元字符的脚本有时称为"here文档".)

17.ps
        ps -efl
        功能:实用程序,生成进程状态信息的列表,默认情况下,输出限制为当前的shell创建的进程.
        -e选项指示ps包括所有正在运行的进程.
        -f选项使ps生成完整的列表.
        -l选项生成长列表.
        ps输出中常见各栏的含义:
                S                                        进程状态.
                UID                                进程的有效用户ID.
                PID                                进程ID.
                PPID                        父进程ID.
                C                                        进程在上一分钟使用的CPU时间的比例.
                PRI                                进程的优先级.
                SZ                                进程的数据和堆栈的千字节大小.
                STIME                        进程创建的时间,如果进程在今天之前创建,则为创建的日期.
                TTY                                控制终端.
                TIME                        迄今为止使用的CPU时间(MM:SS).
                CMD                                命令的名称.
        S域指示进程的状态:
                O                正在处理器上运行
                R                可运行的
                S                休眠
                T                挂起
                Z                僵尸进程

18.sleep
        sleep seconds
        功能:实用程序,体眠指定的秒数,然后停止.

19.kill
        kill [-signalId] {pid}+
        kill -l
        功能:实用程序/shell命令,向进程发送信号.
        kill将代码为signalId的信号发送给指定PID的一个或多个进程,signalId可以是信号的名称或ID值.
        kill默认发送TERM信号(信号ID为15),接收该信号的进程将会终止.
        -l选项可以获得合法的信号名称的列表.
        (只有进程的所有者或超级用户能发送信号给进程.)
        进程能保护自不受所有信号的影响,只有KILL(信号ID是9)是个例外,因此,要确保终结一个进程,应发送信号ID 9给该进程.
        (要注意的是,KILL信号不会让进程收到TERM信号时那样以正常方式释放资并终止.)

20.wait
        wait [pid]
        功能:shell命令,使shell挂起,直到指定进程ID的子进程终止,如果不使用参数,shell等待其所有的子进程终止.

21.查找命令
        a.当shell执行命令时,首先查看是不是内建命令.如果是,shell直接执行命令.echo就是内建的shell命令.
        b.如果不是内建命令,shell查看命令是否以/字符开始.如果是,它假定第一个标记是命令的绝对路径名,并执行所指明的文件.如果文件不存在,或者不是可执行文件,则发生错误.
        c.如果浊内建命令或完整的路径名,则shell搜索PATH环境变量中列出的目录(从左至右).
        d.用户可以在$PATH中添加或修改搜索目录.

22.终止和退出码
        每个Linux进程都以一个退出码终止.按照约定,退出码0表示进程成功完成,非0的退出码表示失败.
                a.所有的内建命令如果失败返回1.
                b.Bash和Korn shell中,特殊的shell变量$?总是包含前一个命令的退出码值.
                c.在C shell中,$status变量保存退出码.

23.exit
        exit number
        功能:shell命令,终止shell,将退出码number返回给它的父进程,如果省略number,则使用前一个命令的退出码.
        (任何脚本都应显式地返回退出码.)
        (结束脚本使用内建的exit命令.)
        (如果shell不包含显式的exit语句,则默认返回上一个命令的退出码.)

24.通用的核心内建命令
        24.1:eval
                eval command
                功能:shell命令,将command的输出作为普通的shell执行.
                (可用于处理生成shell命令的实用程(如tset)的输出.)
        24.2:exec
                exec command
                功能:实用程序,使得shell的映像在进程的内存空间中被command替换.
                (如果command成功执行,执行exec的shell停止生存.如果此shell是登录shell,那么当command终止时登录会话也会结束.)
        24.3:shift
                功能:shell命令,使所有的位置参数$2...$n被重命名为$1...$(n-1),原来的$1被丢掉.
                (可用于脚本中遍历命令行参数,如果没有要移动的位置参数,则显示错误消息.)
        24.4:umask
                umask [octalValue]
                功能:shell命令,把shell的umask值设为指定的八进制数.如果省略参数,则显示目前的umask值.
                (shell的umask值会一直保留到被改变,子进程从它们的父进程继承umask值.)
                (每个Linux进程都包含一个特殊的量umask值,用来限制创建文件时所请求的权限设置,umask的设置位和请求的权限设置位进行异或运行.)
                (如果文件在重定向前已经存在,原来文件的权限值保留,忽略umask值.)
发表于 2009-3-26 18:12:49 | 显示全部楼层
顶,书到用时方恨少
回复 支持 反对

使用道具 举报

发表于 2009-3-26 19:08:42 | 显示全部楼层
帮顶!!!好东西!!!
回复 支持 反对

使用道具 举报

发表于 2009-3-26 19:12:49 | 显示全部楼层
请问编写MAKEFILE算不算事SHELL编程?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表