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



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/bash

echo "请输入一个单词: "
read -a words

echo "输入的第一个单词是: ${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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值