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
下一篇 2016-08-21

相关推荐

  • 常用的MySQL数据库备份

    常用的MySQL数据库备份方式 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可…

    2015-06-13
  • N22 网络班-第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。   2、取出最后登录到当前系统的用户的相关信息。   3、取出当前系统上被用户当作其默认shell的最多的那个shell。   4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxus…

    Linux干货 2016-09-06
  • linux进程及作业管理

    linux进程及作业管理 cpu指令权限等级: 特权级也叫hierarchical protection domains, 有的也叫用户态. 是一种用来保护数据和阻止恶意行为的机制. 电脑操作系统提供不同权限访问级别的资源. 特权级分为四级, 特权级0,1,2,3. 在windows中只使用特权级0和特权级3, 特权最高的是特权级0, 可以直接操作硬件, 如…

    Linux干货 2016-09-19
  • CentOS7的虚拟机安装

    刚学习linux下CentOS7的操作,熟悉一下CentOS7的安装,所以写一下CentOS7的安装教程,如果那里有写的不对的话希望得到指正。 我是在VMware下装的CentOS7 第一步配置硬件 先创建一个虚拟机 这里我选择的典型模式,新手嘛,新手难度的创建就好,高手难度的等新手难度熟练了再去碰好了,当然这是我的建议… 下一步然后光盘选择稍后…

    2017-07-15
  • 如何使用openssl工具创建私有CA

    一、CA及证书 非对称加密是为了保证互联网中通讯信息安全使用的一种算法,密钥是成对出现(公钥和私钥),它的特点是发送方A使用接收方B的公钥加密数据,所有只有B拥有与之配对的私钥解密该数据,反之亦然。那么,A和B之间怎么交换得到对方的真实安全的公钥呢?此时就需要一个权威的机构来验证公钥的合法性,这个机构称之为CA(Certification Authority…

    2017-07-16