Linux初学者的全面指南(四):shell编程(上)

目录

一、Shell编程

1.shell script概述

2.shell脚本用途

 3.编写脚本

 4.执行脚本

 5.调试脚本

二、shell变量

1.变量类型

2.变量赋值和访问 

3.内部变量

4.变量值输出 

5.变量值读取

 6.数组

总结 


一、Shell编程

1.shell script概述

Shell 是操作系统中的命令解释器,它提供了与系统进行交互的接口。常见的 Shell 有 bash、sh 等。

Script(脚本)是一组命令的集合,可以自动化执行特定的任务。与一般的编译型语言不同,Shell Script 是解释型语言,不需要编译,可以直接运行

2.shell脚本用途

Shell脚本广泛用于系统管理、任务调度、数据处理和自动化测试等领域,能够简化复杂任务,提高工作效率。

系统管理: Shell 脚本可以用于自动化系统的日常管理任务。例如,管理员可以编写一个脚本,定期检查系统的磁盘使用情况并清理旧文件,从而避免磁盘空间不足问题。

任务调度: 可以通过 Shell 脚本与 cron 搭配使用,定时执行任务。例如,备份数据库、同步文件或自动生成报表。

数据处理: Shell 脚本可以批量处理文本、数据文件,比如过滤日志、统计数据等操作。

 3.编写脚本

Shell脚本本身就是一个文本文件,示例:

 #!/bin/bash

 #显示 ”Hello World!”

 echo "Hello World!"

 与其他脚本语言编程一样,Shell脚本编程无需编译器,也不需要集成开发环境,一般使用文本编辑器即可。

Shell脚本的基本构成 

#!/bin/bash

#这是一个测试脚本

echo -n "当前日期和时间:"

date

echo -n "程序执行路径:"$PATH

echo "当前登录用户名:`whoami`"

echo -n "当前目录:"

pwd

#end

包含外部脚本:指在一个脚本文件中引入或执行另一个脚本文件的内容 

包含外部脚本文件的用法如下:

①   . 脚本文件名

示例:

②   source 脚本文件名

#!/bin/bash

#引入03.sh

#./03.sh

source 03.sh echo "source:执行03"

两种方式的作用一样,为简单起见,一般使用点号

 4.执行脚本

  • 使用指定的Shell解释器执行脚本
  • 使用source命令执行脚本
  • 使用bash命令执行脚本

示例:

#!/bin/bash

echo "Hello World"

 5.调试脚本

利用Shell解释器的选项实现调试。

Shell解释器 [选项] 脚本文件

选项与参数:

-n:不执行script,仅查询语法的问题。

-v:打印脚本的原始内容,不对变量进行解释或扩展。

-x:打印已经扩展后的命令,显示脚本的实际执行效果。

  • 利用set -x        set +x 是用于控制命令的执行跟踪的指令,分别用于开启和关闭调试模式。调试模式下,Shell 脚本会在执行每一条命令之前,将该命令打印到终端 

#!/bin/bash

echo "这是没有调试的命令"

set -x  

echo "这是被调试模式跟踪的命令1"

echo "这是被调试模式跟踪的命令2"

set +x  

echo "调试模式已关闭,命令将不再被打印"

二、shell变量

1.变量类型

用户自定义变量

在编写Shell脚本时定义,可以在Shell程序内任意使用和修改。可以将它看作局部变量,仅在当前Shell实例中有效。

#!/bin/bash  

name="John Doe"  

age=30  

echo "Hello, my name is $name and I am $age years old."  

age=31  

echo "Now I am $age years old."

环境变量

在 Shell 脚本中,环境变量是系统为进程和程序提供的一种方式。环境变量通常是全局的,在整个系统中都可以访问,可以直接在 Shell 程序中使用这些环境变量,也可以在运行时对它们进行修改。

#!/bin/bash

echo "脚本开始时的目录是:$(pwd)"

echo "当前用户的主目录是:$HOME"

cd $HOME

echo "当前目录是:$(pwd)"

echo "当前登录的用户名是:$USER"

echo "脚本结束时的目录是:$(pwd)"

2.变量赋值和访问 

变量定义

变量无须事先声明,给变量赋值也就是定义一个变量的过程          

        变量名=值      注意:`=`两边没有空格

变量名的命名应当遵循如下规则:

  • 首个字符必须为字母或下划线:name, _name 是合法的,1name 是不合法的。
  • 中间不能有空格:full_name 是合法的,full name 是不合法的。
  • 不能使用标点符号:user_name 是合法的,user-name 是不合法的。
  • 不能使用 Shell 关键字:if, for, while 是 Shell 的关键字,不能作为变量名。

 变量的使用

#!/bin/bash

username="Alice"

user_age=30

echo "用户名:$username"

echo "年龄:$user_age"

username="Bob"

user_age=35

echo "新的用户名:$username"

echo "新的年龄:$user_age"

删除变量

使用 unset 命令可以删除变量。

#!/bin/bash

username="Alice"

user_age=30

echo "用户名:$username"

echo "年龄:$user_age"

unset username

unset user_age

echo "用户名:$username"

echo "年龄:$user_age" 

添加环境变量

使用export命令将变量添加到环境中,作为临时的环境变量(一种全局变量)只在当前 Shell 会话中有效,关闭会话后将消失。          

export 变量名=变量值

#!/bin/bash

export MY_VAR="Old Value"

echo "原始 MY_VAR 的值是:$MY_VAR"

export MY_VAR="New Value"

echo "修改后的 MY_VAR 的值是:$MY_VAR" 

  • 如果是要使环境变量永久生效,可以将 export 命令添加到 .bashrc 或 .bash_profile 文件中。

注意:测试前请备份

  1. 以编辑 .bashrc 文件为例 vim ~/.bashrc 
  2. 在文件末尾添加 export MY_VAR="Persistent Value"
  3. 保存并退出,执行以下命令使修改生效 source ~/.bashrc 

3.内部变量

#!/bin/bash

echo "当前脚本的文件名:$0"

echo "第一个参数:$1"

echo "第二个参数:$2"

echo "传递的参数个数:$#"

echo "所有参数(使用\$*):$*"

echo "所有参数(使用\$@):$@"

echo "所有参数(使用\"\$@\"):" "$@"

echo "上一个命令的退出状态:$?"

echo "当前 Shell 进程ID:$$"

echo "运行 ls 命令:" ls

echo "ls 命令的退出状态:$?"

4.变量值输出 

echo命令

  • 命令用于在屏幕上打印出指定的字符串,实现在标准输出的文本显示。它不仅可以用于简单的输出,还能实现更复杂的格式控制。
  • 输出控制:使用双引号包围输出内容可以防止 Shell 对大多数特殊字符进行解释。然而,美元符号($)、反引号(`)和双引号(")在双引号中仍然保持特殊意义。如果需要在输出中显示这些字符,则需使用转义符(反斜杠 \)进行处理。

echo "显示美元符号:\$";echo "显示反引号:\`";echo "显示双引号:\"";

printf命令

  • 格式化输出:指定输出格式,如字符串、整数、浮点数等。
  • 控制宽度和对齐
  • 转义字符支持:使用转义字符进行格式化输出。
  • printf命令可以提供格式控制字符串,语法如下:    
        printf  格式字符串  [参数列表...] 

# 示例 1: 基本用法

printf "Hello, %s!\n" "World"

# 示例 2: 格式化数字

printf "整数:%d\n" 42

printf "浮点数:%.2f\n" 3.14159

# 示例 3: 多个参数

printf "名字: %s, 年龄: %d\n" "Alice" 28

# 示例 4: 控制宽度和对齐

printf "|%-10s|%5d|\n" "Alice" 30

printf "|%-10s|%5d|\n" "Bob" 40

# 示例 5: 使用转义字符

printf "这是第一行\n这是第二行\n"

5.变量值读取

  • 使用read命令可以将变量的值作为字符串从键盘读入        

           read 变量  

  • 在执行read命令时可以不指定变量参数,它会将接收到的数据放置在环境变量$REPLY 中。

 #!/bin/bash

echo "请输入您的名字:"

read name  

echo "请输入您的年龄:"

read age  

echo "请输入您的城市:"

read         # 不指定变量名,输入存储在 $REPLY 中

echo "您的名字是:$name"

echo "您的年龄是:$age"

echo "您的城市是:$REPLY"  # 使用 $REPLY

 6.数组

  • bash支持一维数组(不支持多维数组)。
  • 在Shell中用括号来表示数组,数组元素用空格符号分开
              数组名=(值1 ... 值n)
  • 可以单独定义数组的各个元素。
  • 可以不使用连续的下标,而且下标的范围没有限制。
  • 读取数组元素值的语法格式为:
               ${数组名[下标]}
  • 采用以下用法获取数组元素的个数:
              ${#数组名[@]}
  • 以下方法用于取得数组单个元素的长度:
              ${#数组名[n]}

#!/bin/bash

fruits=("Apple" "Banana" "Cherry" "Date")

echo "第一个水果是:${fruits[0]}"

echo "第二个水果是:${fruits[1]}"  

echo "数组中水果的个数是:${#fruits[@]}"  

echo "第二个水果的长度是:${#fruits[1]}"   fruits[4]="Elderberry"

echo "新增水果是:${fruits[4]}"  

echo "访问不存在的下标:${fruits[10]}"  

echo "所有水果:"

for fruit in "${fruits[@]}"; do    

echo "$fruit"

done

总结 

Shell编程是Linux和Unix系统中的一项强大技能,它不仅能够提高你的工作效率,还能让你在自动化任务处理方面拥有更多的控制权。通过本篇博客,我们从基础的shell script概述开始,逐步深入到脚本的编写、执行、调试,以及shell变量的各个方面。

希望本篇博客能够帮助你建立起对Shell编程的全面认识,并激发你进一步探索和学习的兴趣。随着你对Shell编程的不断学习和实践,你将能够解锁更多的自动化潜力,让你的系统管理变得更加高效和智能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值