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++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

JAVA transient 关键字作用详解

《JAVAtransient关键字作用详解》Java的transient关键字用于修饰成员变量,使其不参与序列化过程,通过自定义序列化方法,可以手动控制transient变量的序列化行为,本文给大... 目录一、transient关键字作用二、原理详解三、典型使用场景四、代码示例五、注意事项六、与 stat

Spring Boot/Spring MVC核心注解的作用详解

《SpringBoot/SpringMVC核心注解的作用详解》本文详细介绍了SpringBoot和SpringMVC中最常用的15个核心注解,涵盖了请求路由映射、参数绑定、RESTfulAPI、... 目录一、Spring/Spring MVC注解的核心作用二、请求映射与RESTful API注解系列2.1

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

C#中的sealed修饰符的作用详解

《C#中的sealed修饰符的作用详解》在C#中,sealed修饰符的作用是“密封”用来阻止类被继承,或者阻止方法/属性在派生类中被重写,接下来通过本文给大家介绍C#中的sealed修饰符的作用详解,... 目录✅ 1.sealed用于类(class)作用:示例:✅ 2.sealed用于方法或属性(必须与

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让