• Shell 基本语法


    说到Linux那必然要少不了Shell,Shell编程的语法格式还是有很大的特点。

    首先学习每一中编程的第一段代码总是 Hello Word

    Shell 中 : 

    echo "Hello Word";
    #竟然和PHP一模一样
    

    1.变量定义以及命名

        命名规则 :(1) 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

           (2) 中间不能有空格,可以使用下划线(_)。

           (3) 不能使用标点符号。

           (4) 不能使用bash里的关键字(可用help命令查看保留关键字)。

           PS:变量定义不需要任何修饰符,并且 = 左右不可有空格,必须紧挨着,shell中空格有着很大作用,定义数组就会发现。

     Shell变量命名实例:

    name="xiaoming";
    echo $name;
    

    2.变量的使用

      当定义完变量后我们使用变量是需要加上$符号啦

      实例:

    name="xiongming";
    echo $name;
    echo ${name};
    

     以上两种使用方式都可行,第一种比较简便,十分类似php变量,第二种则更加严谨同时也有其他用法

    echo ${#name}    可以输出name变量长度 #特殊符合可以用来统计字符串长度和数组长度

    3.数组的定义

    当定义数组时便能体会空格的特殊作用

    number=(1 2 3 4 5);
    number[0]=1;
    number[1]=2;
    number[2]=3;
    number[3]=4;
    number[4]=5;
    

     以上便是Shell定义数组的两种方式,shell并不直接支持二维数组,但也可以构造出来,可以通过for循环来使用二维数组的键值

    构造二维数组

    array=('name age sex' 'width height length' 'black red white');
    echo ${array[@]};
    echo ${array[*]};
    echo ${#array[@]};

     使用数组时,@、* 表示引用数组的所有值, # 表示数组长度。

    4.函数的定义以及参数的传递

    shell中的参数传递不需要预定义传输哪些参数

    所有传递的参数会用 $1 $2 $3 ...  自动调用传递的第几个参数

    注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

    $0是Bash中的特殊参数,$ 0是正在运行的进程的名称。如果在shell内部使用它,则它将返回shell的名称。如果在脚本内部使用它,它将是脚本的名称。

    实例:

    param_test(){
         echo "$0是当前shell名称";
         echo "$1是第一个参数";
         echo "$2是第二个参数";
         echo "$3是第三个参数";
    }
    param_test 1 2 3
    

     5.For循环的使用

    for循环的使用有多种方式,这里就展示两种常用的格式

    list=(1 2 3 4 5);
    for i in list
    #list 是一个数组控制了循环的次数,循环次数即数组长度
    do
    #这里执行需要操作的命令
    echo "$i"
    done
    
    
    ########第二种方式
    for((i=1;i<=5;i++))
    do
    echo "这是第$i此循环"
    done
    

    6.While循环的使用

    实例:

    num=5
    while(( $num<=10 ))
    do
        echo $num
        let "$num++";
    done
    

     7.运算操作符的使用

    shell中的运算操作符就比较特殊了,不像常规编程语言那样直接使用运算符号就可以计算
    要想使用运算就必须使用命令   expr   或   let

    7.1  expr的使用个人觉的比较麻烦 还需要用到反引号包含 `运算表达式` ,表达式和运算符之间要有空格,例如 2+2 是不对的 必须是 2 + 2

    num=`expr 2 + 3`
    echo $num
    num=`expr 2 * 3`
    echo $num
    #使用乘法  必须在 * 号前加上反斜杠
    num=`expr 8  2`
    echo $num
    num=`expr 8 - 2`
    echo $num
    

     7.2  let 的使用就比较方便快捷了,而且经过测试执行效率也比expr快上几十倍,运算符和数字之间就不能有空格,等号左右也不能有空格

    let num=2+3
    echo $num
    let num=2-3
    echo $num
    let num=2*3
    echo $num
    let num=8/2
    echo $num
    

     8. 关系运算符

    -eq    检测两个数是否相等,相等返回 true。   (equal)
    -ne    检测两个数是否不相等,不相等返回 true。 (not equal)
    -gt    检测左边的数是否大于右边的,如果是,则返回 true。 (greater than)
    -lt    检测左边的数是否小于右边的,如果是,则返回 true。 (Less than)

    -ge    检测左边的数是否大于等于右边的,如果是,则返回 true。 (Greater than or equal to)
    -le    检测左边的数是否小于等于右边的,如果是,则返回 true。(Less than or equal to)
    PS : 这些关系运算符 我会觉得难记,但也确实难记感觉好混乱,可是它们都是英文缩写过来的记住英文就很简单了

    a=10
    b=20
    
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a 等于 b"
    else
       echo "$a -eq $b: a 不等于 b"
    fi
    if [ $a -ne $b ]
    then
       echo "$a -ne $b: a 不等于 b"
    else
       echo "$a -ne $b : a 等于 b"
    fi
    if [ $a -gt $b ]
    then
       echo "$a -gt $b: a 大于 b"
    else
       echo "$a -gt $b: a 不大于 b"
    fi
    

    9.布尔运算符

    !  非运算
     -o  或运算
     -a  与运算

    a=10
    b=20
    
    if [ $a != $b ]
    then
       echo "$a != $b : a 不等于 b"
    else
       echo "$a == $b: a 等于 b"
    fi
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a 小于 100 且 $b 大于 15 : 返回 true"
    else
       echo "$a 小于 100 且 $b 大于 15 : 返回 false"
    fi
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a 小于 100 或 $b 大于 100 : 返回 true"
    else
       echo "$a 小于 100 或 $b 大于 100 : 返回 false"
    fi
    

    10.逻辑运算符

    这与我们常规的编程语言是相同的

    &&  逻辑 AND
    ||  逻辑 OR

    a=10
    b=20
    
    if [[ $a -lt 100 && $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    
    if [[ $a -lt 100 || $b -gt 100 ]]
    then
       echo "返回 true"
    else
       echo "返回 false"
    fi
    

    11. IF运算符

    每个 if 和 elif 后面要接上then,最后一个 else 则不需要then ,必须要以 fi 结尾。如果 elif 后面没有需要执行的语句则不可以写这个elif,不可留空

    a=10;
    b=20;
    if [ $a == $b ]
    then
        echo "相等"
    elif
    then
        echo "不相等"
    else
        echo "没有任何符合"
    fi
    
  • 相关阅读:
    HIVE Group by、join、distinct等实现原理
    【1.3】shell基础——调试shell(sh -x)
    sql server无法显示请求的对话框,检索数据失败
    sql server索引操作
    sql server中的alter
    tempdb无法收缩。使用 DBCC FREESYSTEMCACHE 解决
    在从该备份集进行读取时,RESTORE 检测到在数据库 "CISDB" 中的页(0:0)上存在错误。系统断定检查已失败
    【1.2】shell基础——stty erase解决按backspace出现^H的情况
    【1.1】shell基本实践——密码输入三次错误则结束
    (5.3.7)数据库迁移——sql server备份文件的加密解密
  • 原文地址:https://www.cnblogs.com/xionghao/p/12002490.html
Copyright © 2020-2023  润新知