Shell 极简教程

作者: 光剑书架上的书 | 来源:发表于2017-11-18 23:34 被阅读71次

    Hello World

    vim hello_world.sh
    
    #!/bin/bash
    echo "Hello World !"
    
    chmod +x *.sh
    ./hello_world.sh 
    Hello,World!
    
    

    变量

    #!/bin/bash
    echo "Hello,World!"
    
    a=1
    b=`expr $a + 1`
    echo $b
    
    

    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

    首个字符必须为字母(a-z,A-Z)。
    中间不能有空格,可以使用下划线(_)。
    不能使用标点符号。
    不能使用bash里的关键字(可用help命令查看保留关键字)。
    除了显式地直接赋值,还可以用语句给变量赋值

    函数

    Jietu20171118-235519.jpg

    其中, $1 表示调用该函数传入的第1个参数。

     17 say_nowtime(){
     18         now_time=`date`
     19         echo "$1 Say now time is:  $now_time "
     20 }
     21 
     22 say_nowtime "Jack"
    

    说明:

    1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。

    运算符

    Shell 和其他编程语言一样,支持多种运算符,包括:

    算数运算符
    关系运算符
    布尔运算符
    字符串运算符
    文件测试运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
    例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

    #!/bin/bash
    echo "Hello,World!"
    
    a=1
    b=`expr $a + 1`
    echo $b
    

    需要注意的是,$a + 1 之间必须要有空格,这跟大部分的编程语言不同。

    字符串

    数组

    image.png

    需要注意的是,数组之间的元素时用空格隔开的,不是用的逗号。

    访问数组元素的语法是: ${array[i]}

    另外,通过

    ${array[*]}
    ${array[@]}

    可以访问数组所有元素。

    获取数组的长度 ${#array[*]} :

    image.png

    有几个特殊字符用来处理参数:

    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    for 循环

    与其他编程语言类似,Shell支持for循环。
    for循环一般格式为:

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    

    写成一行:

    for var in item1 item2 ... itemN; do command1; command2… done;
    

    当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
    in列表是可选的,如果不用它,for循环使用命令行的位置参数。
    例如,顺序输出当前列表中的数字:

    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    

    if else

    if 语句语法格式:

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    

    写成一行(适用于终端命令提示符):

    if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
    

    Shell test 命令

    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
    详见:http://www.runoob.com/linux/linux-shell-test.html


    源代码:

    $ cat hello_world.sh 
    #!/bin/bash
    echo "Hello,World!"
    
    a=1
    b=`expr $a + 1`
    echo $b
    
    
    
    array=(1 2 3 4 5 "x" "y" "z")
    echo ${array[*]}
    echo ${array[@]}
    echo "array[1] = ${array[1]}"
    echo "array length = ${#array[*]}"
    
    
    say_nowtime(){
        now_time=`date` 
        echo "$1 Say now time is:  $now_time "
    }
    
    say_nowtime "Jack"
    

    相关文章

      网友评论

        本文标题:Shell 极简教程

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