首页 > 编程学习 > shell编程扩展-----bash编程

shell编程扩展-----bash编程

发布时间:2022/10/2 6:36:12

bash编程

  • 前言
  • bash示例
  • bash程序解释
    • 第1行:“#!”符号
    • 第2行:注释行用“#”开头。
    • 第3行:执行的bash命令。
  • bash程序执行
  • 变量
    • 变量功能
    • 变量可变性
    • 影响bash环境操作的变量
      • PATH变量
    • 变量设置规则
      • (1)自定义变量:
      • (2)环境变量:
      • (3)位置变量:
      • (4)其它变量
    • 引号
  • 操作符
    • (1)字符串操作符(替换操作符)
    • (2)模式匹配操作符
    • 示例
    • 条件和test命令
      • (1)文件测试操作符
      • (2)字符串操作符
      • (3)整数操作符
      • (4)逻辑操作符
      • 示例:判断两个字符串之间的关系
  • shell流控制
    • (1)条件语句:if
    • (2)确定性循环:for
    • (3)不确定性循环:while和until
    • (4)选择结构:case
    • (5)选择结构:select
    • 示例
  • 函数定义
    • 函数定义:
    • 函数调用:
    • 函数参数说明
    • 示例
    • 关于函数的差异处理
      • 示例
  • 总结

前言

  • bash是许多Linux平台内定的shell。

  • 其名字来源于最初为Unix写bash脚本的作者Steve Bourne。

  • 1.历史命令 history 上下键 .bash_history

  • 2…命令与文件补全 TAB键

  • 3.命令别名设置 alias alias lm=‘ls -al’

    1. 任务管理,前后台控制 如& 或者ctrl-C
    1. 程序脚本 交互性好,脚本文件
    1. 通配符 ls –l /usr/bin/M*
      ls –l /use/bin/M??.txt

bash示例

程序示例:文件名为 hello.sh,目录为/home/wxhd

1 #! /bin/bash
2 # Filename : hello
3 echo "Hello World! “

bash程序解释

第1行:“#!”符号

  • 通常在Linux系统脚本的第一行开头,指明了执行这个脚本文件的解释程序,如果默认的脚本就是bash,那么可以写成:#!/bin/sh
    • 如果“#!”之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。
    • 如果“#!”指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前shell去执行。
    • 如果解释程序没有可执行权限,则会报错;如果“#!”指定的解释程序不存在,那么也会报错。

第2行:注释行用“#”开头。

第3行:执行的bash命令。

执行时,首先查看当前用户是否对此文件具有执行权限,如果没有,则需要使用chmod命令来修改,然后执行。

bash程序执行

  • 修改权限shell命令:
    [wxdh@主机名]$ chmod 777 hello.sh
  • 执行命令:[wxdh@主机名]$ ./hello.sh
  • 结果:在终端显示Hello World!字符串。
    在这里插入图片描述

在这里插入图片描述

变量

变量功能

  • 每个用户登录系统都可以获得一个bash shell,例如:每个人都能使用bash执行mail命令获取邮件。
    在这里插入图片描述

  • Bash是如何得知你的邮箱是哪个文件?
    需要变量来帮忙。
    变量:让某一个特定字符串代表不固定的内容。 y=a+b

变量可变性

  • mail变量

在这里插入图片描述

  • 当dmtsai用户登录,获取MAIL变量内容为 /var/spool/mail/dmtsai
  • 当root用户登录,获取MAIL变量内容为 /var/spool/mail/root

影响bash环境操作的变量

PATH变量

  • 能否在任何目录下执行某个命令,与PATH变量有很大关系。
  • 执行ls命令时,系统就是通过PATH这个变量中的内容所记录的路径顺序来查找命令的。
    在这里插入图片描述

变量设置规则

(1)自定义变量:

  • 用户自定义的变量由字母、数字和下划线组成,并且变量名的第一个字符不能为数字,且变量名大小写敏感。
  • 例如,定义变量name的值为Jane:
    name=Jane
  •  注意:bash不能在等号两侧留空格。
    

在这里插入图片描述

(2)环境变量:

  • 可以用set命令给变量赋值或查看环境变量值
  • 使用unset命令清除变量值
  • 使用export导出变量即可使其它进程访问到该环境变量。

(3)位置变量:

  • 位置变量对应于命令行参数,主要向脚本传递数据,其中$0为脚本名称, 1 为第一个参数,以此类推,参数超过 9 个必须使用 1为第一个参数,以此类推,参数超过9个必须使用 1为第一个参数,以此类推,参数超过9个必须使用{}引用变量。
  • shell保留这些变量,不允许用户以另外的方式定义它们,传给脚本或函数的位置变量是局部和只读的,而其余变量为全局的。

(4)其它变量

在这里插入图片描述

  • $n   $0代表命令本身,$1-9代表接受的第1-9个参数,10以上需要用{}括起来,比如 ${10}代表接收的第10个参数
  • $* 代表接收所有的参数,将所有参数看作一个整体
  • $@ 代表接收的所有参数,将每个参数区别对待
  • $# 代表接收的参数个数
    在这里插入图片描述

引号

在这里插入图片描述

操作符

(1)字符串操作符(替换操作符)

在这里插入图片描述

(2)模式匹配操作符

在这里插入图片描述

示例

程序示例:字符串操作符
[wxdh@主机名]$ name=”hello”
[wxdh @主机名]$ echo $name ${var:-”world”}!
hello world!
[wxdh @主机名]$ echo $name ${var:+”world”}!
hello !
[wxdh @主机名]$ echo $name ${var:=” wxdh”}!
hello wxdh!

在这里插入图片描述

条件和test命令

  • bash可以使用[ … ]结构或test命令测试复杂条件。
    格式为:

  •   [ expression ] 或 test expression
    
  • 注意:左括号后和右括号前空格是必须的语法要求。

  • 返回一个代码,表明条件为真还是为假,如果返回0则为真,否则为假。

(1)文件测试操作符

在这里插入图片描述

(2)字符串操作符

在这里插入图片描述

(3)整数操作符

在这里插入图片描述

(4)逻辑操作符

在这里插入图片描述

示例:判断两个字符串之间的关系

  • [wxdh@主机名]$ test “abc” = “def” ; echo $?
    1
  • [wxdh @主机名]$ [ “abc” != “def” ]; echo $?
    0
  • [wxdh @主机名]$ [ “abc” < “def” ]; echo $?
    0
  • [wxdh @主机名]$ [ “abc” > “def” ]; echo $?
    1
  • [wxdh @主机名]$ [ “abc” <“abc” ]; echo $?
    1
  • [wxdh @主机名]$ [ “abc” > “abc” ]; echo $?
    1

shell流控制

(1)条件语句:if

  • 语法:
    if 条件 then 语句
    [elif 条件 then 语句]
    fi

在这里插入图片描述

(2)确定性循环:for

  • 语法:
    for value in list
    do 语句
    done

在这里插入图片描述

(3)不确定性循环:while和until

  • 语法:while条件 do语句
    done
  • 提示:如果条件的执行结果为0,或条件判断为真时,执行循环体内的命令。
  • 语法:until 条件 do 语句
    done
  • 提示:其判断条件和while正好相反,即条件返回非0,
    或条件为假时,执行循环体内的命

(4)选择结构:case

  • case语法:case 表达式 in 表达式和模式
    模式1 )
    语句;; 允许表达式和含有通配符的模式进行匹配
    模式2 )
    语句;;
    esac

(5)选择结构:select

  • select语法:select value [ in list ]
    do 若没有list则默认为位置变量
    statements using $value
    done

示例

程序示例:对输入的不同后缀的文件做不同的处理。

#! /bin/bash
for filename in "$@"; do 
  case $filename in 
    *.jpg )    exit 0 ;; 
    *.tga )    echo$filename is a tga file”;; 
    *.xpm )  echo$filename is a xpm file” ;; 
    *.pcx )    echo$filename is a pcx file”;; 
    *.tif )      echo$filename is a tif file”;; 
    *.gif )      echo$filename is a gif file”;; 
    * )          echo "procfile: $filename is an unknown graphics file." 
    exit 1 ;; 
  esac 
done 

函数定义

函数定义:

function fname() {
commands commands
}

函数调用:

fname [ parm1 parm2 parm3 … ]

  • 说明:函数在使用前定义,函数名和调用函数参数成为函数的位置变量。在函数或脚本中,可以使用bash特殊变量来引用参数,可以给这些变量附上$符号的前缀,然后像引用其它 shell 变量那样引用它们。

函数参数说明

在这里插入图片描述

示例

程序示例:函数输入参数示例:

程序示例:函数输入参数示例:
[wxdh@主机名]$ testfunc () { 
>echo "$# parameters“
 >echo "$@>}                [wxdh @主机名]$ testfunc
                      0 parameters
                      [wxdh @主机名]$ testfunc a b c
                      3 parameters
                      a b c
                     [wxdh @主机名]$ testfunc a "b c"
                     2 parameters
                     a b c

关于函数的差异处理

在这里插入图片描述

示例

程序示例: 函数输出参数。

 function myfunc(){
    local  myresult='some value'
        echo "$myresult"
        }
        result=$(myfunc)   # or  result=`myfunc` (此处为反引号)
        echo $result

结果:输出“some value”。

总结

  • shell是操作系统为使用者提供的软件或命令解析器。
  • 通常我们所说的shell指的是命令行式shell,其执行方式分为交互式模式和非交互式模式。
  • 常用的文本编辑器包括Vi编辑器、Vim编辑器、Emacs编辑器等,其中,几乎所有Linux版都自带Vi编辑器。
  • bash是使用最多的shell之一,也是许多Linux平台内定的shell,它有变量、操作符、条件和流控制,以及函数,可以为系统管理等编写很复杂的程序。
  • bash是一个常用脚本
Copyright © 2010-2022 kler.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号