美文网首页
Bash基本语法-学习笔记

Bash基本语法-学习笔记

作者: summer_code | 来源:发表于2022-06-24 17:54 被阅读0次

    1.变量
    1.1 环境变量
    HOME:用户的主目录。
    HOST:当前主机的名称。
    TERM:终端类型名,即终端仿真器所用的协议
    USER:当前用户的用户名。

    echo $LANG
    打印结果:
    zh_CN.UTF-8
    echo $PATH
    打印结果:
    /Users/xjk/flutter/bin:/Users/xjk/.npm-global/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/xjk/bin
    echo $PWD
    打印结果:
    /Users/xjk
    

    1.2 自定义变量
    变量名必须遵守下面的规则。

    • 字母、数字和下划线字符组成。
    • 第一个字符必须是一个字母或一个下划线,不能是数字。
    • 不允许出现空格和标点符号。

    2.创建变量

    variable=value
    
    等号左边是变量名,右边是变量。注意,等号两边不能有空格。
    如果变量的值包含空格,则必须将值放在引号中。
    
    myvar="hello world"
    
    a=z                     # 变量 a 赋值为字符串 z
    b="a string"            # 变量值包含空格,就必须放在引号里面
    c="a string and $b"     # 变量值可以引用其他变量的值
    d="\t\ta string\n"      # 变量值可以使用转义字符
    e=$(ls -l foo.txt)      # 变量值可以是命令的执行结果
    f=$((5 * 7))            # 变量值可以是数学运算的结果
    

    3.变量赋值

    foo=1
    foo=2
    echo $foo
    2
    

    4.读取变量
    读取变量的时候,直接在变量名前加上$就可以了

    foo=2
    echo $foo
    每当 Shell 看到以$开头的单词时,就会尝试读取这个变量名对应的值。
    如果变量不存在,Bash 不会报错,而会输出空字符。
    
    由于$在 Bash 中有特殊含义,把它当作美元符号使用时,一定要非常小心,
    echo $the book is $100.0
    book is .0
    需要输出美元符合时$,需要在$前面加\进行转义:
    echo $the book is \$100.0
    book is $100.0
    

    读取变量的时候,变量名也可以使用花括号{}包围,比如a也可以写成{a}。这种写法可以用于变量名与其他字符连用的情况。

    a=foo
    echo $a_file   #会将"a_file"解释为变量
    打印结果:
    
    echo ${a}_file
    打印结果:
    foo_file
    
    变量名a_file不会有任何输出,因为 Bash 将其整个解释为变量,而这个变量是不存在的。只有用花括号区分$a,Bash 才能正确解读。
    事实上,读取变量的语法$foo,可以看作是${foo}的简写形式。
    如果变量的值本身也是变量,可以使用${!varname}的语法,读取最终的值。
    myvar=USER
    echo ${!myvar}
    echo ${myvar=USER}
    

    如果变量值包含连续空格(或制表符和换行符),最好放在双引号里面读取。

    a="1 2  3"
    echo $a
    #打印结果:我电脑上测试后面的2个空格能正常输出
    1 2  3
    echo "$a"
    打印结果:
    1 2  3
    

    5.删除变量

     a="1 2  3"
    echo $a
    1 2  3
    unset a
    echo $a
    
    

    这个命令不是很有用。因为不存在的 Bash 变量一律等于空字符串,所以即使unset命令删除了变量,还是可以读取这个变量,值为空字符串。
    所以,删除一个变量,也可以将这个变量设成空字符串。

    a="1 2 3"
    a=
    echo $a
    
    

    6.输出变量
    用户创建的变量仅可用于当前 Shell,子 Shell 默认读取不到父 Shell 定义的变量。为了把变量传递给子 Shell,需要使用export命令。这样输出的变量,对于子 Shell 来说就是环境变量。

    export命令用来向子 Shell 输出变量。

    export NAME=foo
    #新建子shell
    bash
    
    The default interactive shell is now zsh.
    To update your account to use zsh, please run `chsh -s /bin/zsh`.
    For more details, please visit https://support.apple.com/kb/HT208050.
    bash-3.2$ echo $NAME
    foo
    #修改继承的变量值
    NAME=baz
    #退出
    exit
    #读取NAME的值
    echo $NAME
    foo
    
    

    7.特殊变量
    Bash 提供一些特殊变量。这些变量的值由 Shell 提供,用户不能进行赋值。

    (1)$?

    $?为上一个命令的退出码,用来判断上一个命令是否执行成功。返回值是0,表示上一个命令执行成功;如果不是零,表示上一个命令执行失败。

    ls doesnottexist
    ls: doesnottexist: No such file or directory
    echo $?
    1
    

    上面例子中,ls命令查看一个不存在的文件,导致报错。$?为1,表示上一个命令执行失败。
    (2)$$

    $$为当前 Shell 的进程 ID。

     $$
    zsh: command not found: 5229
    

    这个特殊变量可以用来命名临时文件。

    LOGFILE=/tmp/output_log.$$
    echo $LOGFILE
    /tmp/output_log.5229
    

    (4)$!

    $!为最近一个后台执行的异步命令的进程 ID。

    #查看后台异步进程
    echo $!
    0
    #开启后台命令
    firefox &
    [1] 5629
    zsh: command not found: firefox
    [1]  + 5629 exit 127   firefox
    #再次查看后台异步命令进程
    echo $!
    5629
    

    (5)$0

    $0为当前 Shell 的名称(在命令行直接执行时)或者脚本名(在脚本中执行时)。

     echo $0
    -zsh
    

    (6)$-

    $-为当前 Shell 的启动参数。

    echo $-
    569JNRXZghiklms
    

    (7)@和#

    $# 表示脚本的参数数量,$@表示脚本的参数值.
    

    8.readonly命令
    readonly命令等同于declare -r,用来声明只读变量,不能改变变量值,也不能unset变量。

    readonly foo=1
    foo=2
    //打印结果:
    zsh: read-only variable: foo
    
    1. let 命令
      let命令用于将算术运算的结果,赋予一个变量。
    let num=2+3
    expr $num
    打印结果:
    5
    注:num=2+3这个式子里面不能有空格,否则会报错
    
    • 清屏操作
      Ctrl + L或者
    clear
    
    • 自动补全
      当命令输入到一半的时候,可以按一下 Tab 键,Readline 会自动补全命令或路径。比如,输入cle,再按下 Tab 键,Bash 会自动将这个命令补全为clear。
      如果符合条件的命令或路径有多个,就需要连续按两次 Tab 键,Bash 会提示所有符合条件的命令或路径。
    • 操作历史
    $ history
    

    此命令会输出这个文件的全部内容。用户可以看到最近执行过的所有命令,每条命令之前都有行号。越近的命令,排在越后面。

    ....
    1620  cd
    1621  ls
    1622  desktop
    

    相关文章

      网友评论

          本文标题:Bash基本语法-学习笔记

          本文链接:https://www.haomeiwen.com/subject/meovvrtx.html