实验楼-高级Bash脚本编程指南

实验1.Bash介绍与入门

1.简介:Bash是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell

    shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。所有的UNIX命令和工具再加上公共程序,对于Shell脚本来说,都是可调用的。

2.运行Bash脚本的方式: 1)使用shell来执行:sh hello.sh

           2)使用Bash来执行:bash hello.sh

           3)还可以让脚本本身就具有可执行权限,通过chmod命令可以修改:chmod u+rx hello.sh    然后运行 ./hello.sh

3.使用重定向:>为重定向符号,例如将输出文件保存在一个txt中, eg: echo "hello world">my.txt

4.使用脚本清除/var/log下的log文件:

  /dev/null 可以理解为一个黑洞,里面是空的,什么东西都可以往里面扔,扔了就没了。

实验2.Bash中的特殊字符(上)

1.注释:#为注释

    #!用于指定当前脚本的解释器,这里用bash,应该知名其完整路径,即#!/bin/bash

    在echo中转义的#是不能作为注释的,eg:echo The \# here doesn‘t begin a comment

2.分号:1)使用分号可以在同一行上写两个或两个以上的命令

    2)使用双分号可以终止case选项

3.点号:等价于source命令,用于在当前Bash环境下读取并执行filename.sh中的命令

4.引号:1)“ ”:双引号会组织string中大部分特殊字符

    2)‘ ’:单引号会组织string中所有特殊字符的解释,这是一种比双引号更强烈的形式

5.斜线和反斜线:1)斜线 /:文件名路径分隔符,分割文件名不同的部分;也可以用作除法算术操作符。注意在Linux中表示路径的时候,许多个/和一个/是一样的效果

        2)反斜线:一种对单字符的引用机制,转义表示

6.反引号:命令替换,command结构可以将命令的输出赋值到一个变量中去。反引号中的命令会优先执行

  eg: cp `mkdir back` hello.sh back

7.冒号:1)空命令:等价于“NOP”,也可以被认为与shell的内建命令true作用相同,退出码是(0),即while:与while true语义相同

    2)变量扩展/子串替换

        与>重定向操作符结合使用时,将会把一个文件清空,但不会修改这个文件的权限,如果之前这个文件不存在,就创建这个文件

        与>>重定向操作符结合使用时,将不会对预先存在的目标文件产生任何影响,如果这个文件不存在,就创建这个文件

    3)注释行(不推荐)

    4)用来在/etc/passwd和$PATH变量中做分隔符

8.冒号

  1)测试操作符:在一个双括号结构中,?就是c语言的三元操作符

9.美元符号($)

  1)变量替换

  2)命令替换

实验3-bash中的特殊字符(下)

1.小括号()

  1)命令组:在括号中的命令列表,会作为一个子shell来运行。由于是在子shell中,所以脚本剩下的部分是不可用的。父脚本,即脚本本身,将不能够读取在子进程中创建的变量。

  2)初始化数组:arr=(1 2 4 5)

          echo ${arr[2]}

2.大括号{}

  1)文件名扩展,eg cp t.{txt,back}---没太懂

  2)代码块,又被称为内部组,这个结构事实上创建了一个匿名函数。然而,与标准函数不同的是,其声明的变量,对于脚本其他部分的代码来说还是可见的

3.中括号[]

  1)条件测试:条件测试放在[]中,其中[shell内建test命令的一部分,不是/usr/bin/test中的外部命令的一个链接,双中括号[[ ]]也用作条件测试

  2)数组元素:数组中每个元素的标号

4.尖括号(< 和 >)

  1)重定向:test.sh>filename 重定向test.sh的输出到文件filename中,如果filename存在,那么将会被覆盖

        test.sh&>filename 重定向test.sh的stdout(标准输出)和stderr(标准错误)到filename中

        test.sh>&2重定向test.sh的stdout到stderr中

        test.sh>>filename把test.sh的输出追加到文件filename中,如果filename不存在将会被创建

5.竖线(|)

  1)管道:分析前边命令的输出,并将输出作为后边命令的输入,这是一种产生命令链的好方法。eg: ls -l | ./test.sh #把ls -1的输出输送到一个脚本中

6.破折号(-)

  1)选项,前缀:在所有的命令内如果想使用选项参数的话都要加上前缀

  2)用于重定向stdin或stdout

7.波浪号(~):表示home目录

实验4-变量和参数

1.变量赋值:赋值时等号前后一定不要有空格;等号既可以做条件测试操作,也可以用于赋值操作

 变量引用:引用一个变量将保留其中的空白,如果是变量替换就不会有了,所以在shell中如果想打印空白字符,需要用双引号进行引用"$hello"

 多变量设置:同一行要设置多个变量,应该用空格隔开

2.变量不区分类型:与大多数编译型语言不同,Bash不区分变量的类型。本质上,Bash变量都是字符串,但是依赖于具体的上下文,Bash也允许比较操作和整数操作,其中的关键因素是,为变量赋的值是否只有数字。

case "$varname" in
    [a-z]) echo "abc";;
    [0-9]) echo "123";;
esac
时间: 2024-10-09 13:42:08

实验楼-高级Bash脚本编程指南的相关文章

《高级Bash脚本编程指南》十年来首次修订

新年伊始,开源慕课的知识库上线了.初期提供了<Linux命令大全/Bash 参考><高级Bash脚本编程指南>两个系列.其他资料正将陆续上线. 其中,<高级Bash脚本编程指南>对于Shell学习者来说,是一本神一样的书籍. 它的原作者是Mendel Cooper,英文名叫<Advanced Bash-Scripting Guide>发表在http://tldp.org/ 上,是一本免费的书籍. 有人说,学习Unix/Linux,有座山叫shell编程,你总

高级Bash脚本编程指南

http://tldp.org/LDP/abs/html/ 高级Bash脚本编程指南对脚本语言艺术的深入探索 本教程不承担以前的脚本或编程知识,但进展迅速走向一个中级/高级水平的指令...一直偷偷在细小的UNIX®智慧和学识.它作为一本教科书,一本手册,自学,并作为一个参考和知识的来源,壳牌的脚本技术.练习和大量的评论实例请读者参与,在这样的前提下,真正学习脚本的唯一途径是编写脚本.这本书是适合课堂使用的一般介绍编程的概念.本文件被授予公共领域.没有版权! 奉献对于安妮塔,所有魔术的来源内容表第

bash脚本编程之条件判断、条件测试

脚本编程: 编程面向过程有如下几种执行方式 顺序执行 选择执行:  如 if, case 循环执行:  如 for, while, until bash的变量类型: 本地变量 set VAR_NAME=value 设置变量赋值 如: set User=Centos unset VAR_NAME 撤消变量赋值 如: unset User=Centos ${VAR_NAME} 作用范围:当前shell进程: 局部变量 local VAR_NAME=value 设置变量赋值 unset VAR_NAM

bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量

一.学习目的 1.了解bash脚本的变量类型及变量的使用 2.了解bash中条件测试的种类及如何在bash中实现条件的判断 3.学会在bash中做算术运算 4.了解特殊变量的使用 二.学习内容 1). ①.bash的变量类型: 环境变量 .本地变量.局部变量.位置变量.特殊变量 环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程 本地变量: VALUENAME= VALUE 作用领域为整个bash的进程 局部变量:local VALUENAME

bash脚本编程之用户交互

bash脚本编程之用户交互: read [option]... [name ...] -p 'PROMPT'    读取输入的内容 -t TIMEOUT    超时时间,如果超过了该时间,继续执行下面代码 bash -n /path/to/some_script 检测脚本中的语法错误 bash -x /path/to/some_script 调试执行 示例: 输入一个磁盘文件信息,使用fdisk -l显示该磁盘信息 #!/bin/bash read -p "Enter a disk specia

bash脚本编程for

bash脚本编程:        if语句.bash -n.bash -x CONDITION:            bash命令:                用命令的执行状态结果:                    成功:true                    失败:flase 成功或失败的意义:取决于用到的命令: 单分支:            if CONDITION; then                if-true            fi 双分支:     

bash脚本编程基础

bash编程   bash脚本编程是过程式解释编程,其实就是linux命令的堆砌,既然是编程就应该有相应编程语法.    与任何过程式编程一样,过程式编程的特点就是:顺序执行,选择执行,循环执行.    过程式编程:以指令为中心,设计算法,数据服务于算法,过程式编程的灵魂:算法.    1.变量:数值变量,字符变量           bash环境:                本地变量:当前shell进程:                环境变量:当前shell进程及其子进程:       

压缩工具及bash脚本编程

回顾: RAID: 不同的服务器配置起来他的借口可能配置起来有所不同,但是官方一般都提供响应的说明书,按照说明书进行配置就行.关键是理解RAID级别的机制的意义是什么 LVM: 其实是一个逻辑设备他存在的主要作用是提供卷管理操作,我们称之为"volume", 卷管理操作的目的主要是实现把一个或多个底层的物理设备给组织成一个逻辑设备,我们可以将底层的任何类型的块设备,包括我们常见的基本磁盘分区,或者甚至是RAID都OK,只要他们提供块级别的存储空间,但是考虑到任何单个硬件设备他们的边界都

bash脚本编程之十 函数

bash脚本编程之十 函数详解 ·函数(function) function翻译成函数对于中文来讲不是特别的精确,因为function的真正意思是功能,理论上function这个英文单词既可以翻译成函数,又可以翻译成功能,但是我们数学意义上的函数和程序中的函数并不是同一个概念,所以我们如果把function称为功能可能会更合适一点,但是我们大家约定俗成通常都称其为函数,函数是实现结构化编程的一个重要思想,其主要目的是为了实现代码重用 ·库(library) 库是由一些共享对象(so->share