• [Notes] Shell 语法


    执行

    1. 直接在shell命令行中输入shell 命令,但是此时只能输入一行;

    2. 创建xxx.sh文件,在其中写入文件,限定文件的权限为可执行

    # 令文件有可执行权限
    chmod +x xxx.sh
    # 执行
    ./xxx.sh
    # 执行
    bash xxx.sh
    

    3. 查看脚本文件中是否有语法错误

    bash -n xxx.sh

    4. 跟踪执行 

    bash -x xxx.sh
    

      

    约定标记

    # !/bin/bash

    # date & author

    echo "Hi!"
    • #!是一个约定标记,告知系统本脚本采用哪个解释器。
    • #是单纯的注释标记
    • $?表示变数,是前一个指令完毕后的返回值。在 Linux 返回值为 0 代表执行成功
    • &&和||
    指令下達情況 說明
    cmd1 && cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則開始執行 cmd2。
    2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則 cmd2 不執行。
    cmd1 || cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則 cmd2 不執行。
    2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則開始執行 cmd2。
    • >和>>,表示输出的重定向,分别是“替换”和“累加”的功能。

    • <和<<,表示输入的重定向,特别的是<是将右侧的内容通过标准输入的方式输入到左侧;而<<则是指定,左侧的在接受标准输入的过程中,如果遇到了右侧的显示的字符,则终止输入。
    • <<<表示右侧是一个字符串输入,其中的单词会一个一个输入左侧.
    cat <<< 'hi there'
    #output:hi there
    
    • "和', ""中的变量是显示变量的值,而''中的变量不显示变量中统统作为字符串

    括号

    {}的使用

    1. 配合$,用来明确变量名的可识别度,例如:

    aa='hahah'
    echo ${aa}_is
    # output: hahah_is
    

    2. 可以用来对一串命令进行执行,这些命令在当前shell中执行,所以在内部修改外部定义的变量是有效的;此时,{}中第一个命令和{之间必须有空格,结束必须有‘;’

    ()的使用

    1. 和{}一样可以用来对一串命令进行执行,但是这些命令会在子shell中执行,即内部的复制不会影响()外面的变量。

     2. $(指令)的功能和`指令`的功能是一样的,例如$(uname -r)和`uname -r`

    []的使用和test命令简述

    shell中的test命令可以产生各种退出状态,bash中[和test命令的作用是一样,并且[与表达式之间需要空格

    test命令有三类:字符串比较、算术比较和与文件有关的条件测试。特别注意,对于数字而言,因为shell的弱类型定义方式,它既可以表示为数值型,也可以表示为字符串型,这会导致不同比较方式的结果有些不同。

    1. 字符串比较和[]例子

    string1 = string2  :如果两个字符串相同则为真

    string1 != string2 :如果两个字符串不同则结果为真

    -n string :如果字符串不为空则结果为真

    -z string :如果字符串为空(null),则结果为真

    # 使用test命令
    if test "$str1" = "$str2" ; then
    fi
    
    # 使用[命令, [与表达式之间要有空格
    if [ "$str1" != "$str2" ] ; then
    fi
    

      

    2. 算术比较和[]例子

    exp1 -eq exp2 :如果两个表达式相等,为真

    exp1 -ne exp2 :如果两个表达式不等,为真

    exp1 -gt exp2 :如果exp1>exp2,为真

    exp1 -ge exp2 :如果exp1>=exp2,为真

    exp1 -lt exp2 :如果exp1<exp2,为真

    exp1 -le exp2 :如果exp1<=exp2,为真

    !exp :如果exp为假,返回真

    if [ $num1 -eq $num2] ; then
    fi
    

      

    对于数字而言,因为shell的弱类型定义方式,它既可以表示为数值型,也可以表示为字符串型,这会导致不同比较方式的结果有些不同。

    val1="1"
    val2="001"
    
    # 字符串比较,返回值1,两个字符串不等
    [ "$val1" = "$val2"] 
    echo $?
    
    # 数值比较,返回值0,两个数值相等
    [ "$val1" -eq "$val2" ]
    echo $?
    

      

    3. 文件比较和[]例子

    -d file :如果file是目录,返回真

    -e file :如果文件存在,返回真;注意这个和-f重合度高,且因为历史原因,常用-f

    -f file :如果文件存,返回真

    -g file :如果文件的set-group-id为被设置,则结果为真;set-group-id是文件权限设置中的一个位,当文件的set-group-ID位被设置时,在许可权限部分,组用户的x被替换成s,

    -r file : 如果文件刻度,则为真

    -s file :如果文件的set-user-id被设置,则为真

    -w file : 如果文件可写,则为真

    -x file :如果文件可执行,则为真

    if [ -f /bin/bash ] ; then
    fi
    

      

     变量使用

    使用

    ${var_name}
    $var_name
    

      引用变量值

    变量赋值

    #注意等号两侧不能有空格
    variable=value
    

    变量可以直接在字符串中使用,可以使用{}来使得变量更易被解释器识别

    str="hi"
    echo "I say $str" 

    unset删除变量

    aaaa=111
    echo $aaaa
    #output: 111
    unset aaaa
    echo $aaaa
    #output:空白
    

      

  • 相关阅读:
    第十一周作业
    第十周作业
    第九周编程
    第十二周作业
    第十一周作业
    第十周作业
    第八周作业
    第七周作业
    第五周作业
    2019春季学期第四周作业
  • 原文地址:https://www.cnblogs.com/immortalBlog/p/11237910.html
Copyright © 2020-2023  润新知