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

相关文章

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

SpringBoot 中 CommandLineRunner的作用示例详解

《SpringBoot中CommandLineRunner的作用示例详解》SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的... 目录1、CommandLineRunnerSpringBoot中CommandLineRunner的作用

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一