shell编程规范与变量

目录

一 Shell脚本概述

1 shell的作用

2 编写第一个shell脚本

3 重定向与管道操作

(1)重定向操作

1)重定向输出

2)重定向输入

3)错误重定向

(2)管道操作

二 Shell变量的作用,类型

1 自定义变量

(1)定义新的变量

(2)查看和引用变量的值

(3)变量赋值的特殊操作

1)双引号(“)

2)单引号(‘)

3)反撇号(`)

4)read命令

(4)设置变量的作用范围

(5)数值变量的运算

2 特殊的shell变量

(1)环境变量

(2)只读变量

(3)位置变量

(4)预定义变量


一 Shell脚本概述

  • Shell:是用户与操作系统内核(如Linux、Unix)交互的命令行接口,常见的Shell包括Bash(Bourne-Again Shell)、shzsh等。

  • Shell脚本:是一个包含一系列Shell命令的文本文件,通过Shell解释器执行。它类似于Windows的批处理文件(.bat),用于自动化重复性任务或组合复杂操作。

1 shell的作用

  • 自动化任务:例如批量重命名文件、定时备份数据。

  • 系统管理:快速完成软件安装、日志分析、监控系统状态。

  • 简化复杂操作:将多步命令组合成一个脚本,避免手动输入错误。

通过/etc/shells文件了解当前系统支持的shell脚本种类。

2 编写第一个shell脚本

(1) Shell脚本的基本结构

#!/bin/bash          # 指定解释器(这里是Bash)
# 这是一个注释       # 注释以#开头
echo "Hello World!"  # 打印输出

  • 第一行#!/bin/bash(Shebang):告诉系统用哪个解释器执行脚本。

  • 注释:用#开头,提高脚本可读性。

  • 命令:逐行编写需要执行的命令。

(2)运行Shell脚本

运行脚本的命令:

1:打开一个子shell,执行脚本的指令,然后退出该子脚本

bash aaa.sh

sh aaa.sh

./aaa.sh(需要执行权限)

2:直接用当前shell执行

source aaa.sh

. aaa.sh

3 重定向与管道操作

(1)重定向操作

重定向用于控制命令的输入/输出方向,可以将数据从文件导入命令,或将命令的输出保存到文件。

交互设备文件说明
标准输入键盘,0,命令将从标准输入文件中读取在执行过程中需要的输入数据
标准输出显示器,1,命令将执行后的输出结果发送到标准输出文件
标准错误显示器,2,命令将执行期间的各种错误信息发送到标准错误文件
1)重定向输出

>:覆盖输出到文件(若文件不存在则创建)

>>:追加输出到文件

2)重定向输入

<:将文件内容作为命令的输入

3)错误重定向

2>:将错误信息覆盖写入文件

ls /nonexistent 2> error.log           # 错误信息保存到error.log

2>>:追加错误信息到文件

ls /invalid 2>> error.log          # 追加错误日志

&> 或 2>&1:将标准输出和错误一起重定向

command &> all_output.log           # 输出和错误都保存到文件
command > output.log 2>&1         # 等效写法

(2)管道操作

管道(|)用于将前一个命令的输出作为后一个命令的输入,实现多命令协作。

管道符组合使用命令的总结:

管道符(|)可以将多个命令串联起来,实现数据的筛选、处理和格式化。以下是 df(磁盘信息)、grep(文本过滤)、awk(文本处理)的经典组合用法。

常见场景:

  1. 过滤数据

    cat file.txt | grep "error" # 筛选包含"error"的行

  2. 统计处理

    ps aux | grep nginx | wc -l # 统计nginx进程数量

  3. 排序与去重

    sort data.txt | uniq # 排序后去重

  4. 组合重定向

    ls -l | tee dir_list.txt # 输出到屏幕的同时保存到文件

对比总结:

操作符号作用示例
输出覆盖>将命令输出覆盖写入文件echo "text" > file
输出追加>>将命令输出追加到文件末尾echo "text" >> file
输入重定向<从文件读取输入(代替键盘)wc -l < file
错误重定向2>将错误信息写入文件ls /tmp 2> error.log
管道``

将前一个命令的输出作为下一个的输入

 ls | grep ".txt"

二 Shell变量的作用,类型

1 自定义变量

(1)定义新的变量
  • 语法变量名=变量值等号两边不能有空格

  • 命令规则

    变量名只能包含字母、数字和下划线
    变量名必须以字母或下划线开头
    变量名是区分大小写的
    变量名不能使用Shell的保留关键字
    变量名应尽可能具有描述性
    避免使用空格或特殊字符

(2)查看和引用变量的值
  • 查看变量

    echo $name        # 输出变量值 echo ${name}        # 推荐写法(避免歧义)

  • 查看所有变量

    set             # 显示当前Shell所有变量(包括环境变量)

(3)变量赋值的特殊操作
1)双引号(“)

特点:允许解析变量和转义字符。

greeting="Hello, $name!"  # 输出:Hello, Alice!  

2)单引号(‘)

特点:禁止解析变量和转义字符(原样输出)。

greeting='Hello, $name!'      # 输出:Hello, $name!  

3)反撇号(`)

作用:将命令的输出赋值给变量。

current_time=`date`      # 传统写法  
current_time=$(date)     # 现代推荐写法(支持嵌套)  

注意:` 反撇号后面跟命令=  $()  。它们之间的区别:$()支持指令的嵌套,`不支持

4)read命令

作用:从用户输入或文件中读取值并赋值给变量。

read -p "Enter your name: " username  # 交互式输入  
echo "Welcome, $username!"  

(4)设置变量的作用范围
  • 局部变量(默认):仅在当前Shell进程中有效。

    local_var="Local"

  • 环境变量(全局):通过export传递给子进程。

    export GLOBAL_VAR="Global"

  • 查看环境变量

    env     # 显示所有环境变量

    echo $PATH    # 查看特定环境变量(如PATH)

(5)数值变量的运算

Shell默认将变量视为字符串,需用以下方式执行数学运算:

方法1:$(( )) 或 let

a=5 b=3

echo $((a + b))                 # 输出:8(加法)

let "c = a * b"                  # 使用let计算乘法

echo $c                 # 输出:15

方法2:expr命令

result=$(expr $a + $b)                  # 注意操作符两侧需有空格

echo $result                  # 输出:8

方法3:bc命令(浮点数运算)

echo "scale=2; 10 / 3" | bc               # 输出:3.33(保留2位小数)

关键总结表
操作语法示例说明
定义变量var="value"等号两侧无空格
引用变量echo ${var}避免歧义(如${var}_suffix
双引号"$var"解析变量和转义字符
单引号'$var'原样输出
命令替换`cmd` 或 $(cmd)将命令输出赋给变量
环境变量export VAR="value"对子进程生效
整数运算$((a + b))加减乘除取模等
浮点数运算echo "5.0 / 2" | bc需安装bc工具

2 特殊的shell变量

(1)环境变量

1)作用:由系统或用户定义,影响Shell和子进程的行为。

2)常见环境变量

变量名含义示例
PATH可执行程序搜索路径echo $PATH
HOME当前用户的家目录cd $HOME
USER当前用户名echo $USER
SHELL当前Shell路径echo $SHELL
PWD当前工作目录echo $PWD
LANG系统语言环境export LANG="en_US.UTF-8"
(2)只读变量

1)作用:变量一旦定义,不能被修改或删除。

2)命令:

readonly PI=3.14    # 定义只读变量
PI=3.14159          # 报错:readonly variable
unset PI            # 报错:cannot unset

readonly            # 列出所有只读变量

(3)位置变量

1)作用:用于获取脚本或函数的参数。

2)常见位置变量参数

变量名含义示例(脚本调用:./script.sh arg1 arg2
$0脚本名称echo $0 → ./script.sh
$1-$9第1到第9个参数echo $1 → arg1
${10}...第10个及以后的参数echo ${10}
$#参数个数echo $# → 2
$*所有参数(合并为一个字符串)echo $* → arg1 arg2
$@所有参数(保留独立分隔)echo $@ → arg1 arg2(与$*在循环中有区别)
(4)预定义变量

1)作用:存储Shell运行时的状态信息。

2)常见预定义变量参数

变量名含义示例
$?上一条命令的退出状态(0=成功)ls /tmp; echo $? → 0
$$当前Shell进程的PIDecho $$
$!最后一个后台进程的PIDsleep 10 &; echo $!
$_上一个命令的最后一个参数ls /tmp; echo $_ → /tmp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值