Shell编程简单规范与变量——温故而知新给自己做个简单复习以前的知识

Shell脚本概述

  • Shell是一个特殊的应用程序
    它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令,并进行解释,将需要执行的操作传递给内核执行,并采用默认shell
  • shell脚本的概念
  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操作
  • 脚本的构成
  • 脚本申明(解释器):若第一行尾"#!/bin/bash",表示此行一下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect
  • 注释信息:以#开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 可执行语句:比如echo命令,用于输出" " 之间的字符串

编写一个简单的Shell脚本

  • 编写脚本代码

    • 使用vim文本编辑器
    • 每行一条Linux命令,按执行顺序依次编写
      vim /root/simple.sh
      #!/bin/bash
      #This is a simple script
      cd /var/log
      echo “当前的目录位于:”
      pwd
      echo “其中以 m开头的文件包括”
      ls -lh m*
      在这里插入图片描述
  • Shell脚本的执行方法一:使脚本具有可执行属性
    chmod +x /root/simple.sh
    /root/simple.sh #可以绝对路径的方式执行
    ~/simple.sh #也可以相对路径的方式执行
    在这里插入图片描述

  • 方法一小结
    我在脚本中写入了cd /var/log通过执行脚本后自己的所在路径不会发生改变
    因为使用的是shell脚本当中你的shell环境进行执行的而不是使用我当前的shell环境进行执行

  • Shell脚本的执行方法二:指定Shell来解释脚本,不要求文件必须有 x 权限
    source 脚本路径:. simple.sh 或者 source simple.sh
    在这里插入图片描述

  • Shell脚本的执行方法二:sh脚本文件路径
    sh 脚本路径:sh simple.sh
    在这里插入图片描述

  • 执行脚本shell环境小总结

  • sh 或者加权限的方式执行脚本shell环境是脚本中的shell环境

  • . 或 source 执行脚本shell环境是通过当前环境执行的

重定向与管道操作

  • 交互式硬件设备
    • 标准输入:从该设备接收用户输入的数据
    • 标准输出:通过该设备箱用户输出数据
    • 标准错误:通过该设备报告执行出错信息
类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器
  • 重定向操作
类型 操作符 用途
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出(覆盖) > 将输出结果保存到指定的文件
重定向输出(追加) >> 将输出结果追加到指定的文件尾部
标准错误输出(覆盖) 2> 将错误信息保存到指定的文件
标准错误输出(追加) 2>> 将错误信息追加到指定的文件中
混合输出 &> 将标准输出、标准错误的内容保存到同一个文件中
混合输出 2>&1 将标准错误输出重定向到标准输出

ls -lh > log.txt 2>&1 等同于 ls -lh &> log.txt
(将标准输出结果保存到指定的文件)

扫描二维码关注公众号,回复: 13055958 查看本文章
  • 管道操作符号" | "
  • 将左侧的命令输出结果,作为右侧命令的处理对象
  • 管道符号可以配合xargs用法传递参数

Shell变量的作用、类型

  • 变量的作用
  • 用来存放系统和用户需要使用的特定参数(值)
    • 变量名:使用固定的名称,由系统预设或用户自定义
    • 变量值:能够根据用户设置、系统环境的变化而变化
  • 变量的类型
    • 自定义变量:由用户自定义、修改和使用
    • 特殊变量:环境变量,只读变量,位置变量,预定义变量

自定义变量

  • 定义一个新的变量
  • 变量名以字母或下划线开头,区分大小写,建议全大写
    在这里插入图片描述
  • =是把右边的值赋值给左边的变量
  • 查看变量的值
    在这里插入图片描述
    product=benet
    version=6.0
    name=“zhang san”
    echo $product
    echo $product $version
    echo ${product}40
    在这里插入图片描述
  • 赋值时使用引号
    双引号:允许通过$符号引用其他变量值
    单引号:禁止引用其他变量值,$视为普通字符
    反撇号:命令替换,提取命令执行后的输出结果与$()一个作用
    在这里插入图片描述

从键盘输入内容为变量赋值

read [-p “提示信息”] 变量名

  • 方法一:
    read -p “提示信息” 变量名
    echo $变量名
    在这里插入图片描述

  • 方法二:
    echo -n “提示信息”
    read 变量名
    echo $变量名
    在这里插入图片描述在这里插入图片描述

全局变量、局部变量

可以使用 pstree 命令查看Shell环境,输入 bash 命令进入子Shell环境,
按Ctrl+D组合键或输入 exit 命令退出子Shell环境

  • pstree #查看当前shell环境
    在这里插入图片描述
    在这里插入图片描述
    默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用
    在这里插入图片描述
  • 全局变量
    可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用
    格式1:export 变量名
    格式2:export 变量名=变量值
    在这里插入图片描述

整数变量

  • 整数变量的运算
    expr 变量1 运算符 变量2 [运算符 变量3]
  • 常用运算符
  • 加法运算:+
  • 减法运算:-
  • 乘法运算:*
  • 除法运算:/
  • 求模(取余)运算:%
  • 常用的运算表达式
  • i=$(expr 12 * 5)
  • i=$((10 * 5))
  • i=$[10 * 4]
  • let i=10*3 #这种语法不需要空格
    在这里插入图片描述
  • i++ 相当于 i=$[$i+1]
  • i-- 相当于 i=$[$i-1]
  • i+=2 相当于 i=$[$i+2]
    在这里插入图片描述

特殊的Shell变量

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 使用 env 命令可以查看到当前工作环境下的环境变量
  • 配置文件:/etc/profile(全局变量的配置文件)、~/.bash_profile(当前用户的环境变量配置文件)

常见环境变量

PWD、PATH、USER、SHELL、HOME
变量USER表示用户名称HOME表示用户的宿主目录LANG表示语言和字符集PWD表示当前所在的工作目录变量PATH表示可执行程序的默认搜索路径

  • echo $PATH #查看当前搜索路径
  • PATH="$PATH:/root" #将/root目录添加到搜索路径
  • export PATH="$PATH:/root" #输出为全局环境变量
  • 已经将该目录添加到路径环境变量中,目录内的所有具有执行权限的文件,都可以在当前环境任何目录中执行

环境变量的全局配置文件为/etc/porfile,在此文件中定义的变量作用于所有用户。每个用户还有自己的独立配置文件(~/.bash_profile)可以用来长期变更或设置某个环境变量

  • vim /root/.bash_profile
    export HISTSIZE=200 #修改root用户的历史命令记录条数
    echo $HISTSIZE
    source /root/.bash_profile #读取并执行文件中的设置
    echo $HISTSIZE

readonly命令设置只读变量

product=benet
readonly product #设置为只读变量
echo $product
product=accp #只读变量不可以背重新赋值
unset product #只读变量不可以被删除重启操作系统就没了,unset命令用于删除变量
在这里插入图片描述

位置变量

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量

  • $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ##预定义变量

  • $*、$@:表示命令或脚本要处理的参数

    • $*:把所有参数看成以空格分隔的一个字符串整体(单字符串)反回,代表"$1 $2 $3 $4"
    • $@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立的。代表"$1" “$2” “$3” “$4”
      在这里插入图片描述
  • $#:命令或脚本要处理的参数个数
    在这里插入图片描述

  • $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
    在这里插入图片描述

  • $0:当前执行的脚本或命令的名称
    在这里插入图片描述

vim num.sh
#!/bin/bash
time=backup-`date +%F`.tar
tar zcvf $time $* &> /dev/null    #/dev/null表示的是一个黑洞文件,通常用于丢弃不需要的数据输出
echo "执行了 $0 脚本文件"
echo "一共完成了 $# 个文件的压缩"
echo "具体压缩的文件为:$*"

在这里插入图片描述
在这里插入图片描述

浮点运算

bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk处理

  • bc
    在这里插入图片描述
    在这里插入图片描述

  • awk
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53496398/article/details/114301223