美文网首页
Shell入门

Shell入门

作者: eric_lai | 来源:发表于2017-07-19 12:29 被阅读23次

    本笔记参考自:tutorialspoint

    变量

    一般变量

    一般的变量是指我们自己定义的,在程序当中需要使用的变量。定义时可以通过 = 对其进行初始化,访问变量时使用 $

    # definition of the variable, please note that there is no space surround "="
    greeting="hello world"
    
    # use the variable we defined above
    echo $greeting
    

    在shell编程当中,变量可以分成三类:

    1. 本地变量
    2. 环境变量
    3. shell变量

    特殊(内建)变量

    1. $, 表示当前shell的进程ID;
    2. $0, 表示当前script的文件名;
    3. $n, 表示当前shell需要的参数;
    4. $?, 上一个命令的执行结果代码;
    5. $!, 上一个在后台执行的进程ID;
    6. $*, $@

    首先需要明确$*$@没有任何区别,但是”$*””$@“有很大区别。
    ”$*”会把整个命令行输入的参数包裹成一个参数,用空格分隔。
    ”$@“会把整个命令行的参数拆成一个一个独立的参数,用空格分割。

    参看以下这个例子:

    # file name test.sh
    
    echo '$*'
    for TOKEN in "$*"
    do
       echo $TOKEN
    done
    
    echo '$@'
    for TOKEN in "$@"
    do
       echo $TOKEN
    done
    

    在命令行下运行bash test.sh a b c。输出如下:

    $*
    a b c
    $@
    a
    b
    c

    数组

    在shell当中,数组可以理解成动态数组,并且使用时不一定需要声明。数组下标从零开始,访问时使用${array_name[index]}格式进行。

    name[0]="eric0"
    name[1]="eric1"
    name[2]="eric2"
    
    echo ${name[0]}  #eric0
    echo ${name[1]}  #eric1
    echo ${name[2]}  #eric2
    ecah ${#name[*]} #3 (array length)
    ecah ${#name[@]} #3 (array length, same with above)
    

    操作符

    数学运算符

    a=10
    b=20
    
    val=`expr $a + $b`
    echo "a + b : $val"
    
    val=`expr $a - $b`
    echo "a - b : $val"
    
    val=`expr $a \* $b`
    echo "a * b : $val"
    
    val=`expr $b / $a`
    echo "b / a : $val"
    
    val=`expr $b % $a`
    echo "b % a : $val"
    

    关系运算符

    a=10
    b=20
    
    # -eq --> =
    # -ne --> !=
    # -gt --> >
    # -lt --> <
    # -ge --> >=
    # -le --> <=
    
    # space must appear around "[" and "]"
    
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a is equal to b"
    else
       echo "$a -eq $b: a is not equal to b"
    fi
    

    布尔运算符

    a=10
    b=20
    
    # !
    if [ $a != $b ]
    then
       echo "$a != $b : a is not equal to b"
    else
       echo "$a != $b: a is equal to b"
    fi
    
    # -a --> and
    if [ $a -lt 100 -a $b -gt 15 ]
    then
       echo "$a -lt 100 -a $b -gt 15 : returns true"
    else
       echo "$a -lt 100 -a $b -gt 15 : returns false"
    fi
    
    # -o --> or
    if [ $a -lt 100 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : returns true"
    else
       echo "$a -lt 100 -o $b -gt 100 : returns false"
    fi
    

    字符串运算符

    字符串运算符

    File Test运算符

    File Test运算符

    函数

    定一个函数和其他语言差不多,调用函数时只需要通过函数名,而不需要加上括号。需要注意的是,函数在调用之前必须先定义。

    # define a function
    greet() {
      echo "Hello world from a function"
    }
    
    # call the function
    greet
    

    循环

    下面的代码片段可以列出当前目录下的所有子项目:

    for file in ./*
    do
      echo file
    done
    

    更多循环语句,参看这里
    循环控制语句,continuebreak 参看这里

    条件

    下面的代码片段可以列出当前目录下的所有子项目,并判断该子项目是目录还是文件:

    for file in ./*
    do
      if test -f file
      then
        echo "$file is a file"
      else 
        echo "$file is a directory"
      fi
    done
    

    更多的条件语句,参看这里

    相关文章

      网友评论

          本文标题:Shell入门

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