Shell编程规范与变量:基本操作、read输入、作用范围、运算

本文主要是介绍Shell编程规范与变量:基本操作、read输入、作用范围、运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

    • 1. 变量及其基本操作
      • 变量值
      • 自定义变量
      • 赋值时使用引号
      • 弱引用和强引用
    • 2. 读取用户输入
      • read命令获取输入内容
      • 数组输入
    • 3. 变量作用范围
      • 局部变量与全局变量
      • 环境变量
    • 4. 变量的数学运算
      • 整数运算
      • 非整数运算
      • bc与标准输出
      • 自增自减


1. 变量及其基本操作

变量值

变量值是能够根据用户设置或系统环境的变化而变化的数据。例如:intstring布尔浮点等。

自定义变量

自定义变量是由用户自己定义、修改和使用的变量。

  • 定义新的变量

    格式:变量名=变量值

    变量命名规则:以字母或下划线开头,区分大小写。

    示例:

    product=benet
    version=6.0
    name="zhang san"
    
  • 查看变量的值

    格式:echo $变量名

    示例:

    echo $product
    echo $product $version
    echo ${product}40
    
    • ${} 是一种特殊的语法形式,用于获取变量的值或对变量进行操作。可以应用于任何变量名称,其中变量名称放在花括号中,例如 ${product}
  • 只读变量

    使用 readonly 命令设置只读变量。

    示例:

    product=benet
    readonly product  # 设置为只读变量
    echo $product
    product=accp      # 只读变量不可重新赋值
    unset product     # 只读变量不可删除
    

赋值时使用引号

  • 双引号:允许通过 $ 符号引用其他变量值。

  • 单引号:禁止引用其他变量值,$ 视为普通字符。

  • 反撇号:命令替换,提取命令执行后的输出结果,$(…) 作用相同。

    a=`ps -ef | grep sshd`
    echo $a
    

弱引用和强引用

  • 弱引用"$name",其中的变量引用会被替换为变量值。
  • 强引用'$name',其中的变量引用不会被替换为变量值,而保持原字符串。

2. 读取用户输入

read命令获取输入内容

  • -p prompt:指定提示符,用于提示用户输入数据。

  • -a array:将输入数据存储到一个数组中。

  • 示例一

    read -p "提示信息" 变量名
    echo $变量名
    
  • 示例二

    echo -n "提示信息"
    read 变量名
    echo $变量名
    

数组输入

#!/bin/bashecho "请输入一个单词: "
read -a wordsecho "输入的第一个单词是: ${words[0]}"
echo "输入的第二个单词是: ${words[1]}"
echo "输入的第三个单词是: ${words[2]}"

执行、交互输入和输出:

sh test1.sh 请输入一个单词: 123 456 789输入的第一个单词是: 123
输入的第二个单词是: 456
输入的第三个单词是: 789

3. 变量作用范围

局部变量与全局变量

  • 局部变量:新定义的变量只在当前的 Shell 环境中有效。当进入子程序或新的子 Shell 环境时,局部变量将无法使用。

  • 全局变量:通过 export 命令将指定的变量导出为全局变量,使其在所有的子 Shell 环境中继续使用。

    全局变量的主要特点

    • 全局范围: 全局变量在整个程序或脚本的各个部分都是可见和可访问的。
    • 持久性: 全局变量的生命周期与程序的执行时间相同。它们在程序启动时创建,在程序结束时销毁。
    • 共享性: 全局变量可以在程序的不同函数或方法之间共享数据。这样,多个函数可以使用和修改相同的全局变量。
    • 潜在的副作用: 全局变量的使用可能导致副作用和潜在的复杂性。因为全局变量是可访问的,所以它们可以被任何函数修改,这可能导致程序状态的不确定性和难以调试的问题。
    export 变量名
    export 变量名=变量值
    
  • 示例

    export dn=1
    export dxl=2
    echo $(($dn + $dxl))  # 输出 3
    

环境变量

  • 环境变量由系统维护,用于设置工作环境。系统级环境变量对所有用户可见,用户级环境变量只对当前用户可见。

  • 配置文件

    • 全局配置文件(/etc/profile):在此文件中定义的变量作用于所有用户。

    • 用户配置文件(~/.bash_profile):每个用户的独立配置文件,可以用来长期变更或设置某个环境变量。

    • 示例

      vim /root/.bash_profile
      export HISTSIZE=200					# 修改root用户的历史命令记录条数echo $HISTSIZE
      source /root/.bash_profile  # 读取并执行文件中的设置
      echo $HISTSIZE# 这个profile里面声名两个全局变量,直接在脚本中引用
      
  • 常见的环境变量

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

      echo $PATH
      PATH="$PATH:/root"
      export PATH="$PATH:/root"
      

4. 变量的数学运算

整数运算

  • 格式expr 变量1 运算符 变量2 [运算符 变量3]

  • 运算符+ (加法)、 - (减法)、 `\*` (乘法)、/ (除法)、% (取余)

  • 示例

    expr 12 \* 5
    
  • 常用的运算表达式

    i=$(expr 12 \* 5)
    i=$((12*5))
    i=$[12*5]  #这种用法已弃用
    let i=12*5
    

非整数运算

  • bash 不支持浮点运算,需借助 bcawk 处理。

  • bc 示例

    #加
    f=$(echo "4.3+2.5"|bc)
    echo "4.3+2.5=$f"#减
    f=$(echo "4.3-2.5"|bc)
    echo "4.3-2.5=$f"#乘
    f=$(echo "4.30*2.50"|bc)
    echo "4.3*2.5=$f"#除
    f=$(echo "scale=2;4.3/2.5"|bc)
    echo "4.3/2.5=$f"#混合运算
    f=$(echo "2.2/(2.2-1.1)*2+1.1"|bc)
    echo "2.2/(2.2-1.1)*2+1.1=$f"
    
  • awk 示例

    #加
    f=$(awk 'BEGIN{print 4.5+3.4 }')
    echo "4.5+3.4=$f"#减
    f=$(awk 'BEGIN{print 4.5-3.4 }')
    echo "4.5-3.4=$f"#乘
    f=$(awk 'BEGIN{print 4.5*3.4 }')
    echo "4.5*3.4=$f"#除
    f=$(awk 'BEGIN{print 4.5/3.4 }')
    echo "4.5/3.4=$f"#混合
    f=$(awk 'BEGIN{print (4.5-3.4)*2+3 }')
    echo "(4.5-3.4)*2+3=$f"
    

bc与标准输出

  • bc是一个简单易用的计算器程序,可以用于执行基本的数学运算,包括加、减、乘、除和取余等操作。

  • 在Shell编程中,可以使用bc命令将数学表达式计算结果输出到标准输出或保存到文件中,以满足不同的需求。

  • 示例

    echo 2*2 | bc
    4
    echo 4^2 | bc
    16
    

自增自减

  • i++ 先赋值再加1,i=1+1,相当于 i= ( ( (( ((i+1))
  • ++i 加后再赋值1,1+1=2 2+1=3
  • i-- 相当于 i= ( ( (( ((i-1))
  • i+=2 相当于 i= ( ( (( ((i+2))

这篇关于Shell编程规范与变量:基本操作、read输入、作用范围、运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113141

相关文章

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Spring 中 BeanFactoryPostProcessor 的作用和示例源码分析

《Spring中BeanFactoryPostProcessor的作用和示例源码分析》Spring的BeanFactoryPostProcessor是容器初始化的扩展接口,允许在Bean实例化前... 目录一、概览1. 核心定位2. 核心功能详解3. 关键特性二、Spring 内置的 BeanFactory

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s