首页 > 代码库 > SHELL笔记7

SHELL笔记7

  1. 变量,为用户提供了一种存储、检索、操作数据的途径。

  2. 环境变量、位置变量、预定义的特殊变量、用户自定义变量

  3. 环境变量

    (1)SHELL环境变量,是一类shell预定义变量,是用于设置系统运行环境的变量,有系统统一命名。

    部分环境变量的值由系统设定,部分环境变量的值由用户设定。

    (2)HOME:用户主目录的全路径名

    cd 与cd $HOME等价

    (3)PATH:定义了一些目录路径,路径由冒号分隔。

    在执行命令或shell脚本时,shell会按PATH变量中设定的顺序搜索这些目录,找到的第一个匹配的命令或shell脚本将被执行。

    (4)TERM:终端类型。

    (5)PWD:当前工作目录的绝对路径。

    (6)PS1:主提示符。 根用户的主提示符#,普通用户的主提示符$

    (7)PS2:辅助提示符。默认的辅助提示符为>

    (8)SHELL:定义shell的解释器路径。

    (9)MAIL:定义系统信箱的路径。

    (10)LOGNAME:登陆用户的用户名。

    (11)UID:当前用户的UID。

  4. 位置变量

    当SHELL解释一个命令时,会将位置变量与命令行中的每一个参数关联,依次是:

    $0:对应当前执行的命令名

    $1:对应第1个位置参数

    $2:对应第2个位置参数

    ...

    $9:对应第9个位置参数

    当命令行上的参数多于9个时,需要用shift命令移动位置参数,每执行一个shift命令,变量0不变,从1开始位置参数左移一位。

  5. 预定义的特殊变量


    变量说明
    $#实际位置参数个数(不包括SHELL脚本名)
    $*命令行中的所有位置参数组成的字符串
    $!上一个后台命令对应的进程号
    $?表示最近一条命令执行后的退出状态(返回值),为十进制数。 执行命令成功,一般返回0.
    $$当前进程号PID
  6. 用户自定义的变量

    用户可以根据需要自定义变量。变量名称区分大小写。 

    变量名称,由字母或者下划线开头,后面是任意数量的字母、数字、下划线。

  7. 创建变量

    declare和typeset用于创建变量。 通过选项,还可以设置变量的创建方式。

    例如,declare -r 可以创建只读变量。 只读变量不能被撤销。 不带任何选项执行declare命令,将列出所有设置的变量。

    通过   变量名=变量值  来创建变量。


  8. 用{}来区分变量与其他字符,例如,${order}th,${order}才是变量

  9. unset,删除变量

  10. 变量的赋值

    (1)直接赋值

     NAME=Tom

    (2)使用read命令赋值

     read 变量1 变量2 ...

     //多个数据或变量之间用空格分隔

     //若变量个数与数据个数相等,则对应赋值

     //若变量个数大于数据个数,则没有输入数据的变量取空值

     //若变量个数小于数据个数,则多余的数据赋值给最后一个变量

    (3)命令行参数赋值

     echo "you are $1"

    (4)命令的输出结果赋值

     CURRDIR=‘pwd‘

    (5)文件读入数据实现赋值

     #! /bin/bash

     #filename:readfile

     ls *.c > execfile

     while read LINE

     do

      chmod +x $LINE

     done<execfile

  11. printf 和 echo 输出

    # printf "sdgafgf%d\n" 3

    sdgafgf3

    #echo $name1 [$name2 ...]

  12. 数组

    声明一个数组并为其赋值

    #student=(element1 element2...)

    #i=0

    #echo ${student[$i]}

  13. 数组的复制

    数组还有两个特殊的索引*和@, 其作用都是提取出整个数组元素,但当他们加上双引号使用时,略有不同。 符号@的含义是把原数组的内容复制到一个新数组中,生成的新数组和原来的一样的; 但符号*是把原来的数组中的所有元素当初一个元素复制到新数组中,生成的新数组只有一个元素。

    #all = ("${name[*]}")

    #list = ("${name[@]}")

  14. 数组元素的个数

    ${# name[*]}

  15. 数组元素的长度

    ${# name[num]}

  16. Bourned Shell没有内置的算术运算,不能直接加、减、乘、除。

  17. 整数运算使用expr或let命令

  18. 浮点数运算,使用awk或bc

  19. expr命令

    expr命令,是一个表达式处理命令。使用的运算符:+、-、\*、/、%。运算符前后需要留有空白,且只能是整数运算。

    # echo `expr 3 \* 2`

    6

    #a=5; b=3

    #echo `expr $a + $b`

    8

    #

  20. let命令

    let命令可与expr互换使用。 let语句不需要再变量前加美元符号,但必须将单个的或带有空格的表达式用双引号引起来。

    # a=5; b=3

    # let a=a+b

    # echo a

    a

    # echo $a

    8

    #

  21. bc命令

    # n=`echo "s=2; 10/3" | bc`

    # echo $n

    3

    # n=`echo "scale=2; 10/3" | bc`

    # echo $n

    3.33

    如上所示,scale不能改成别的名字,它表示10/3结果的小数点位数; 

  22. awk命令

    格式:n=`awk ‘BEGIN {}‘`

    # n=`awk ‘BEGIN {a=3.3; b=1.1; printf "a*b=%.2f, a/b=%.3f" a*b, a/b}‘`

    awk: cmd. line:1: fatal: not enough arguments to satisfy format string

    `a*b=%.2f, a/b=%.3f3.63‘

               ^ ran out for this one

    # n=`awk ‘BEGIN {a=3.3; b=1.1; printf "a*b=%.2f, a/b=%.3f" ,a*b, a/b}‘`

    # echo $n

    a*b=3.63, a/b=3.000

    注意printf后面的""后面需要有,


SHELL笔记7