shell学习笔记四

变量、判断、重复动作

export , readonly

    语法:export name[=word]...

              export -p     显示当前环境

              readonly name[=word]

              readonly -p

    用途:export用于修改或者打印环境变量,readonly则使得变量不得修改

    export可以将新的变量添加到环境中: PATH=$PATH:/usr/local/bin

                                                           export PATH

    如果要从程序中的环境中删除变量,则要使用env命令,env也可临时改变环境变量的值:

    env -i PATH=$PATH HOME=$HOME LC_ALL=C awk '...' file1 file2   -i的意思是初始化环境变量也就是丢弃任何继承值,仅传递命令行上指定的变量给程序使用

    unset命令从执行中的shell中删除变量与函数,默认情况下,它会解除变量设置,也可以加上-v来完成:

    unset full_name    删除full_name变量

    unset -v first middle last    删除其他变量

    unset -f function_name    删除function_name函数

env语法:  env [-i] [var=value ...] [command_name [arguments ...]]

    用途:当command_name被env执行时,可针对command_name继承而来的环境有更细致的控制

    -i  忽略继承的环境,仅仅使用命令行上所给定的变量与值

unset语法:unset [-v] variable ...    删除指定变量

    unset -f function_name ...    删除指定函数

位置参数:指的是shell脚本的命令行参数,同时也表示在shell函数内的函数参数。

特殊“变量”提供对传递的参数的总数的访问,以及一次对所有参数的访问

    $#:提供传递到shell的脚本或者函数的参数的总数,当你是为了处理选项和参数而建立循环时,它会很有用

    $*, $@:一次表示所有的命令行参数,这两个参数可用来把命令行参数传递给脚本或函数所执行的程序

    "$*":将所有的命令行参数视为单个字符串

    "$@":将所有的命令行参数视为单独的个体,也就是单独的字符串

shift命令用来截去(lops off)来自列表的参数,由左开始,一旦执行shift,$1的初始值会永远消失,取而代之的是$2的旧值。$2的值变成$3的旧值,以此类推。单纯地使用shift等同于 shift 1.

POSIX内置的shell变量

    #    目前进程的参数个数

    @   传递给当前进程的命令行参数

    *     当前进程的命令行参数

    -     在引用时给予shell的选项

    ?   前一命令的退出状态

    $    shell进程的进程编号

    0    shell程序的名称

    !   最近一个后台命令的进程编号

    ENV  一旦引用,则仅用于交互式shell中,$ENV是可展开的参数

    HOME 根目录

    IFS   内部的字段分隔器

    LANG 当前locale的默认值

    LC_ALL   当前locale的名称

    LC_COLLATE   用来排序字符的当前locale名称

    LC_CTYPE   在模式匹配期间,用来确定字符类别的当前locale的名称

    LC_MESSAGES    输出信息的当前语言的名称

    LINENO   刚执行过的行在脚本或函数内的行编号

    NLSPATH 在$LC_MESSAGES所给定的信息语言里,信息目录的位置

    PATH   命令的查找路径

    PPID    父进程的进程编号

    PS1   主要的命令提示字符串,默认为$

    PS2   行继续的提示字符串

    PS4    以set -x设置的执行跟踪的提示字符串,默认为+

    PWD  当前的工作目录

特殊变量$$可以在写脚本的时候用来建立具有唯一性的文件名,多半是临时的,这是根据shell的进程编号建立文件名。

执行命令之后可以使用echo $?来查看命令执行结束的状态

    0   表示成功退出

    >0   在重定向或单词展开期间失败

    1-125   命令不成功退出,特定的退出值含义是由各个单独的命令定义的

   126   命令找到了,但文件无法执行

   127   命令找不到

   >128   命令因收到信号而死亡

exit语法:   exit [exit-value]

    用途:目的是从shell脚本返回一个退出状态给脚本的调用者;使用程序的退出状态最简单就是使用if语句

test语法:   test [expression]

                   [ [expression] ]

         用途:为了测试shell脚本里的条件,通过退出状态返回其结果。

getopts语法:  getopts  option_spec  variable  [ arguments ...]

    用途:简化参数处理,并且让shell脚本可以轻松地匹配于POSIX参数处理惯例