shell 是弱类型

  1. echo "$0" #参数0
  2. echo "$1" #参数1
  3. echo "$# paramseters" # 返回参数个数
  4. echo "$@" # 以参数 “参数1 参数2 参数3”的形式返回
  5. echo "$*" #以参数 “参数1” “参数2” “参数3” ...形式返回
  6. echo "$_" #保存之前执行命令行的最后一个参数
  7. echo $? #保存了最后一条命令的退出状态 上一条执行成功,所以这条返回 0
  8. abc # 无效命令
  9. echo $? # 上一条无效命令,这条返回一个非0值
  10. echo $$ # 进程ID
  11. echo "\$0=$0;\$1=$1;\$2=$2;"
  12. exit 120 # 退出,并且退出状态是120,可以在执行完毕以后在命令行中输入echo $?来获>取
  13. # ./test.sh a "b c"
  14. # ./test.sh
  15. # a
  16. # 2 paramseters
  17. # a b c
  18. # a b c
  19. # a b c
  20. # 23579

declare attribute variable

attribute

  • -p 显示所有变量的值
  • -i 将变量定义为整数
  • -r 将变量定义为只读
  • -a 将变量声明为数组变量
  • -f 显示所有自定义函数
  • -x 将变量设置为环境变量,以便随后的脚本程序和程序中使用
    1. #! /bin/bash
    2. x=6/3 # =号两边都不能有空格
    3. echo "$x" #6/3
    4. echo $x #6/3
    5. declare -i x # 从新定义x类型
    6. echo $x #6/3
    7. x=6/3
    8. echo $x #2
    9. x=hello # syntax error: invalid arithmetic operator (error token is ".14")
    10. echo $x #0
    11. x=3.14
    12. echo $x #0
    13. x=$[6/3]
    14. echo $x #2
    15. x=$((6/3))
    16. echo $x #2
    17. declare -r x
    18. x=5 # ./test.sh: line 18: x: readonly variable
    19. echo $x #2
    1. x=1123
    2. let "x += 1"
    3. echo $x # 1124
    4. let x+=1
    5. echo $x # 1125
    6. y=${x/1/abc} # 将变量x的1修改为abc
    7. echo $y # abc125

    双引号,单引号,反引号,反斜线

  1. 单引号括起来的作为普通字符串出现
  2. 双引号括起来的,除了“\”,“$”,“’”,“””这几个字符仍然作为特色字符并保留其特殊功能,其余字符仍作为普通字符存在
  3. 反引号被shell解释为命令,或优先执行,并将结果返回,替代其内容
  4. 反斜线 转移字符
    1. #! /bin/bash
    2. echo "current directory is `pwd`" # current directory is /Users/xxx/xxx

全局变量,局部变量,环境变量

  1. #! /bin/bash
  2. #定义函数
  3. func() {
  4. v1=200 #v1全局变量
  5. echo ${v1}
  6. local v2=300
  7. echo ${v2} #v2局部变量,注意函数的参数是局部变量
  8. }
  9. #调用函数
  10. func
  11. v1=100
  12. echo ${v1}

环境变量

按照惯例,Shell中环境变量全部使用大写字母表示。
此命令可以查看环境变量
># set | more

  1. #! /bin/bash
  2. echo "path $PATH"
  3. echo "pwd $PWD"
  • PATH 命令搜索路径,以冒号为分隔符。注意与windows下不同的是,当前目录不再系统路径里
  • HOME 用户主目录的路径名,是cd命令的默认参数
  • COLUMNS 定义里命令编辑模式下可使用命令行的长度
  • HISTFILE 命令历史文件
  • HISTSIZE 命令历史文件中最多可包含的命令条数
  • HISTFILESIZE 命令历史文件中包含的最大行数
  • IFS 定义了Shell的分隔符
  • LOGNAME 当前登录名
  • SHELL Shell的全路径名
  • TERM 终端类型
  • TMOUT Shell自动退出的时间,单位为秒,若设置为0则禁止Shell自动退出
  • PWD 当前工作目录

引用变量的值,清空变量

  1. #! /bin/bash
  2. v1=123
  3. echo "$v1abc" # 没有输出,因为没有v1abc变量
  4. echo "${v1}abc" # 123abc
  5. unset v1
  6. echo $v1 # 没有输出,因为变量被清空了