zoukankan      html  css  js  c++  java
  • 实验楼-高级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
  • 相关阅读:
    MySQL的B+树索引底层构成
    Mybatis 使用注解和Provider类实现动态条件查询
    EF批量插入数据耗时对比
    NOPI Excel 读取公式生成后的数据
    EF 记录执行的sql语句
    c# Redis操作类
    c# ExpandoObject动态扩展对象
    微信小程序干货
    mysql中将多行数据合并成一行数据
    Flask 学习系列(四)---Jinjia2 模板继承
  • 原文地址:https://www.cnblogs.com/bananaa/p/7229716.html
Copyright © 2011-2022 走看看