• linux----shell入门


    Shell脚本的基本元素:

    #!/bin/bash //第一行

    #     //表示单行注释如果是多行注释呢,应该如何操作?多行注释如下所示:

    :<<BLOCK

    中间部分为要省略的内容

    BLOCK

    Shell脚本的第一行均包含一个以#!为起始标志的文本行,这个特殊的起始标志表示当前文件包含一组命令,需要提交给指定的Shell解释执行。紧随#!标志的是一个路径名,指向执行当前Shell脚本文件的命令解释程序。比如:

    #!/bin/bash

    再比如:

    #!/usr/bin/ruby如果Shell脚本中包含多个特殊的标志行,那么只有一个标志行会起作用。

    Shell特殊字符

    下面来看看Shell特殊字符。  

    •双引号":用来使Shell无法认出除字符$、`、之外的任何字符或字符串,也称之为弱引用。  

    •单引号':用来使Shell无法认出所有的特殊字符,也称之为强引用。  

    •反引号`:优先执行当前命令。  

    •反斜杠:有两种作用,一种是用来使Shell无法认出其后的字符,使其后的字符失去特殊的含义,如有特殊含义的字符$,也称为转义符。另外,如果放在指令前,有取消别名的作用,例如在“ m/home/yhc/*.log”中,rm指令前加上,作用是暂时取消别名的功能,将rm指令还原。  

    •分号;:允许在一行上放多个命令。  

    •&:将命令放于后台执行,建议带上nohup。  

    •括号():创建成组的命令。  

    •大括号{}:创建命令块。  

    •<>&:重定向。  

    •*?[]!:表示模式匹配。  

    •$:变量名的开头。  

    •#:表示注释(第一行除外)。  

    •空格、制表符、换行符:当作空白。

    变量和运算符

    变量是放置在内存中的某个存储单元,这个存储单元里存放的是这个单元的值,这个值是可以改变的,我们称之为变量。

    其中,本地变量是在用户现有的Shell生命周期的脚本中使用的,用户退出后变量就不存在了,该变量只用于该用户。

    下面都是跟变量相关的命令,这里只是大致地说明下,后面的内容里会有详细的说明,如下所示:

    变量名="变量"

    readonly 变量名="变量"表示设置该变量为只读变量,这个变量不能被改变。

    echo $变量名

    set 显示本地所有的变量

    unset 变量名 表示清除变量

    readonly 显示当前Shell下有哪些只读变量环境变量用于所有用户进程(包括子进程)。Shell中执行的用户进程均称为子进程。不像本地变量只用于现在的Shell。环境变量可用于所有的子进程,它包括编辑器、脚本和应用。

    环境变量主目录如下:

    $HOME/.bash_profile(/etc/profile)设置环境变量,例句如下:

    export test="123"

    查看环境变量,命令如下:

    env

    或者用如下命令:

    export

    本地变量中包含环境变量。环境变量既可以运行于父进程,也可以运行于子进程中。本地变量则不能运行于所有的子进程中。

    变量清除命令如下:

    unset 变量名

    调试Shell脚本

    使用bash-x可以调试Shell脚本,bash会先打印出每行脚本,再打印出每行脚本的执行结果,如果只想调试其中几行脚本,可以用set-x和set+x把要调试的部分包含进来,命令如下:

    set -x

    脚本部分内容

    set +x

    这个时候可以直接运行脚本,而不需要再执行bash-x了。这个功能在实际工作中非常有用,可以帮助我们调试变量,找出bug点,总之是非常有用的功能,希望大家掌握。

    退出或出口状态

    一个Unix进程或命令运行终止时,将会自动地向父进程返回一个出口状态。如果进程成功执行完毕,将会返回一个数值为0的出口状态。如果进程在执行过程中出现异常而未能正常结束时,将会返回一个非零值的出错代码。

    在Shell脚本中,可以利用“exit[n]”命令在终止执行Shell脚本的同时,向调用脚本的父进程返回一个数值为n的Shell脚本出口状态。其中,n必须是一个位于0~255范围内的整数值。如果Shell脚本是以不带参数的exit语句结束执行的,则Shell脚本的出口状态就是脚本中最后执行的那条命令的出口状态。

    在Unix系统中,为了测试一个命令或Shell脚本的执行结果,$?内部变量将返回之前执行的最后一条命令的出口状态,这些状态中,0才是正确值,其他非零的值都表示是错误的。

  • 相关阅读:
    UVa12093
    UVa1631
    vue路由跳转的三种方式
    vue中的钩子函数(判断是否跳转页面)beforeEach
    vue中子组件向父组件传值方法?
    vue中对数组,对象的操作如下
    vue-router的beforeEach的使用?
    vue拦截器使用?
    vue中父子组件以及兄弟组件的传值情况?
    前端模块化?
  • 原文地址:https://www.cnblogs.com/ld1977/p/6564767.html
Copyright © 2020-2023  润新知