shell-语句总结

shell脚本语法总结

过程式编程语言:

顺序执行
选择执行
循环执行

shell默认是顺序执行,如果有判断或循环语句则执行判断或循环。

条件判断

if
    单分支
        if 判断条件:then
            条件为真的分支代码
        fi

    双分支
        if 判断条件; then
            条件为真的分支代码
        else
            条件为假的分支代码
        fi

    多分支
    if CONDITION1; then
        if-true
    elifCONDITION2; then
        if-ture
    elifCONDITION3; then
        if-ture
        ...
    else
        all-false
    fi
    逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
    if取的是判断语句的运行状态返回值。true or false

case
    case 变量引用 in
        PAT1)
            分支1
            ;;
        PAT2)
            分支2
            ;;
        ...
        *) #任意长度任意字符 (最终会匹配的条件)可以不写这个条件
            默认分支
            ;;
        esac
    =====================================================
    pat)通配模式

        case支持glob风格的通配符:
            *: 任意长度任意字符
            ?: 任意单个字符
            []:指定范围内的任意单个字符
            a|b: a或b

注case 分支语句要用双分号结尾。
case中的patter后的分支语句通过golb通配case引用的变量,匹配则执行分支语句。不匹配则往下执行。

循环

for
    for循环  循环条件是列表不为空,列表中的数据用完则循环结束

        for 变量名in 列表;do
            循环体
            ..
        done

    执行机制:
        依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

while
    while CONDITION; do

        循环体
        done

    CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环 
    因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
    进入条件:CONDITION为true;    
    退出条件:CONDITION为false

until
    ntil循环  条件为假时开始循环,条件为真时结束循环。

    until CONDITION; do
            循环体
    done

    进入条件:CONDITION 为false
    退出条件:CONDITION 为true
    CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

continue

用于循环体中---提前中断循环体的本轮运行
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层

while CONDTIITON1; do
    CMD1
    ...
    if CONDITION2; then
        continue
    fi
    CMDn
    ...
done

break—跳出循环 ,并停止整个循环。默认是1

break 后可以加数字 --用于循环体中,可以指定跳出那一层循环(存在嵌套循环)。

break [N]:提前结束第N层循环,最内层为第1层

    while CONDTIITON1; do
    CMD1
    ...
    if CONDITION2; then
    break
    fi
    CMDn
    ...
done

创建无限循环

while true; do5
    循环体
done

until false; do
    循环体
Done

exit

只要在脚本中出现exit则脚本退出执行。
如果在脚本的子shell中出现exit则退出子shell脚本运行。

交互–用户输入

select 属于循环语句
select variable in LIST
        do
            循环体命令
        done

    运行后,用户按提示(根据in后面的列表生成的菜单)输入选择,则将select将后面的变量名赋值为对应的in列表中的值。
    elect 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入
    用户输入菜单列表中的某个数字,执行相应的命令
    用户的输入 被保存在内置变量REPLY 中。

    常配合case使用



read
使用read来把输入值分配给一个或多个shell变量:
    -p指定要显示的提示
    -t TIMEOUT
    read从标准输入中读取值,给每个单词分配一个变量
    所有剩余单词都被分配给最后一个变量
    read -p “Enter a filename:“ FILE

函数

函数function是由若干条shell命令组成的语句块
实现代码重用
模块化编程
机构化编程
把独立功能的代码当作一个整体,并为之一个名字;命名的代码段,此即为函数;

函数命名应尽量避免与命令或系统关键字重名。命名法则与变量相同  

语法一:

        function f_name{
        ...函数体...
        }

    语法二:(常用)

        f_name() {
        ...函数体...
        }

函数的使用
    函数的定义和使用:
        可在交互式环境下定义函数
        可将函数放在脚本文件中作为它的一部分
        可放在只包含函数的单独文件中,使用source或点号调用函数文件。

    调用:函数只有被调用才会执行;
        再脚本中调用:给定函数名;函数名出现的地方,会被自动替换为函数代码
        交互式环境下,注销函数 使用 unset 函数名 

函数支持位置参数变量和特殊变量;在脚本中,脚本的位置参数变量和特殊变量与其内部函数的位置参数变量和特殊变量不是同一变量,注意区别开
注:函数放在调用函数的代码之前,定义代码段不执行,调用才执行。一般都放到脚本的前面先定义好函数。下面在调用。

return

定义脚本最后一条命令的返回值,多用于给函数定义
例如函数内部有条件判断语句,不同情况下,每个语句都有执行成功的可能。这样可以给每中情况定义不同的状态返回值。

local

定义局部变量
多用于函数内部的变量定义。定义后该变量只在该函数体内部生效。

特殊用法

while循环的特殊用法(遍历文件的每一行):

    while read line; do         ##read 与用户交互命令 line是个变量可以自定义名称。
    循环体                         ##处理的内容为line这个变量的内容(文本中的一行)。
    done < /PATH/FROM/SOMEFILE  #使用标准输入重定向输入文档。

依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
练习

扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功。




双小括号方法,即((…))格式,也可以用于算术运算等于 let EXPRESSION

双小括号方法也可以使bash Shell实现C语言风格的变量操作
    #I=10
    #((I++))

for循环的特殊格式: help for

    for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
    do
        循环体
    done

    控制变量初始化:仅在运行到循环代码段时执行一次,一次循环时初始化变量

    控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

    条件判断表达式,可以写的非常简单。 i<=100即可

    括号内中的内容需要用分号隔开。

    例如for (( i=0;i<=100;i++));do
            let sum+=$i
        done
        echo "$sum"


for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
Arithmetic for loop.

Equivalent to
    (( EXP1 ))
    while (( EXP2 )); do
            COMMANDS
            (( EXP3 ))
    done
EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is
omitted, it behaves as if it evaluates to 1.

Exit Status:
Returns the status of the last command executed.

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/38472

(0)
yywyyw
上一篇 2016-08-21 20:45
下一篇 2016-08-21 20:45

相关推荐

  • Shell——Linux基本命令(2)

    1.Shell Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行. shell也被称为LINUX的命令解释器(commandinterpreter). vshell是一种高级程序设计语言. 2.bash shell GNUBourne-AgainShell(bash)是GNU计划中重要的工…

    2017-07-13
  • Linux开班典礼

    心得体会和近一周学习计划

    2018-03-26
  • MAN手册、Linux文件系统等介绍

    适合人群:Linux初学者 主要内容: Man手册使用介绍        FHS文件系统介绍        Linux文件类型介绍        随堂笔记 操作环境:CentOs 6.8 ☆ MAN 手册介绍 man手册…

    Linux干货 2016-10-18
  • Linux用户权限管理和信息查找

    这里给大家介绍一下基本的一些用户管理的命令。       基于这些命令演示一下例题如下:      复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost&nbs…

    Linux干货 2016-11-20
  • corosync v2 + pacemaker + crmsh 实现mariadb高可用

    高可用mariadb拓扑图 一、设计前提     1、时间同步 # ntpdate 172.16.0.1 或者 # chronyc sources     2、所有的主机对应的IP地址解析可以正常工作, 主机名要与命令#uname -n 所得的结果一致   &…

    Linux干货 2016-08-28
  • 磁盘管理——MBR与GPT的分区

    一、硬盘的结构 这里讲的主要是网上所谓的老式磁盘,它是由一个个盘片组成的,我们先从个盘片结构讲起。如下图所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图中蓝色部分)。扇区是磁盘的最小组成单元,通常是512字节           &…

    Linux干货 2016-09-02