zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/xionghao/p/12002490.html
Copyright © 2011-2022 走看看