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脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在