当前位置: 首页 > news >正文

Shell编程(一)

Shell编程

  • 前言
  • 一、 Shell基础介绍
      • 1.1 Shell简介
      • 1.2 Shell解释器
      • 2.1 Shell脚本基础
        • 2.1.1 编写第一个Shell脚本
        • 2.1.2 执行Shell脚本
  • 二、Shell变量
      • 2.1 变量定义与使用
      • 2.2 变量类型
      • 2.3 特殊变量操作
  • 三、 Shell字符串操作
      • 3.1 字符串定义
      • 3.2 字符串操作
  • 四、Shell参数传递
  • 五、Shell运算符
      • 5.1 算术运算符
      • 5.2 关系运算符
      • 5.3 字符串运算符
      • 5.4 文件测试运算符
  • 六、 Shell流程控制
      • 6.1 if条件判断
      • 6.2 for循环
      • 6.3 while循环
      • 6.4 case语句
  • 七. Shell函数
      • 7.1 函数定义与调用
      • 7.2 函数参数
      • 7.3 函数返回值
  • 八、 Shell数组
      • 8.1 数组定义
      • 8.2 数组操作
      • 8.3 数组遍历
  • 九. 加载其他文件变量
  • 结语

前言

  Shell脚本编程是Linux系统管理和自动化运维的必备技能。作为连接用户与操作系统内核的桥梁,Shell不仅是一种强大的命令语言,更是一门功能完备的脚本编程语言。本文将全面系统地介绍Shell编程的各个方面,从基础概念到高级应用,帮助您掌握这一实用技能。
  无论您是系统管理员、开发人员还是运维工程师,熟练使用Shell脚本都能显著提高工作效率。让我们开始这段Shell编程的学习之旅吧!

一、 Shell基础介绍

1.1 Shell简介

  Shell是一个用C语言编写的程序,它为用户提供了访问操作系统内核服务的接口。简单来说,Shell就是用户与Linux系统沟通的桥梁。

  • Shell类似于DOS下的command和后来的cmd.exe
  • 它既是一种命令语言,又是一种程序设计语言
  • Shell script是为Shell编写的脚本程序
  • Shell编程一般指shell脚本编程,而不是开发shell自身

1.2 Shell解释器

  Linux系统支持多种Shell解释器,常见的有:

  • bash:最常用的Shell,也是大多数Linux系统的默认Shell
  • sh:Bourne Shell,早期的标准Shell
  • csh:C Shell,语法类似C语言
  • ksh:Korn Shell,结合了Bourne Shell和C Shell的特性
    可以通过cat /etc/shells命令查看系统中安装的Shell解释器。

2.1 Shell脚本基础

2.1.1 编写第一个Shell脚本

创建一个简单的Shell脚本hello.sh

#!/bin/bash
echo "Hello World!"

在这里插入图片描述
脚本说明:

  • #!是一个约定的标记,称为shebang,告诉系统使用哪种Shell解释器
  • echo命令用于向窗口输出文本

赋予脚本执行权限:

chmod +x ./hello.sh

在这里插入图片描述

2.1.2 执行Shell脚本

执行Shell脚本的几种方式:

  1. 直接执行(需要执行权限):
./hello.sh

在这里插入图片描述

  1. 作为解释器参数运行(不需要执行权限):
sh /[path]/hello.sh

在这里插入图片描述
3. 使用绝对路径执行:

/path/to/hello.sh

在这里插入图片描述

二、Shell变量

2.1 变量定义与使用

Shell变量定义语法:

变量名=

示例:

your_name="bigdata.com"

在这里插入图片描述
变量使用:

echo $your_name
echo ${your_name}  # 花括号可选,用于明确变量边界

在这里插入图片描述
变量命名规则:

  • 首个字符必须为字母(a-z, A-Z)
  • 中间不能有空格,可以使用下划线
  • 不能使用标点符号
  • 不能使用bash关键字

2.2 变量类型

Shell变量主要分为两类:

  1. 局部变量:仅在当前Shell实例中有效
name="hadoop"
echo $name  # 可以正常输出
  1. 全局变量(环境变量):所有程序都能访问
export PATH=$PATH:/your/path

2.3 特殊变量操作

  • 只读变量:
readonly name="linux"
  • 删除变量:
unset name  # 不能删除只读变量

在这里插入图片描述

三、 Shell字符串操作

字符串是Shell编程中最常用的数据类型之一。

3.1 字符串定义

单引号:

skill='linux'
str='I am good at $skill'  # 变量不会被解析

在这里插入图片描述
双引号:

skill="linux"
str="I am good at $skill"  # 变量会被解析

在这里插入图片描述

3.2 字符串操作

获取字符串长度:

string="abcd"
echo ${#string}  # 输出4

在这里插入图片描述
提取子字符串:

string="hello world"
echo ${string:1:4}  # 输出"ello"

在这里插入图片描述
查找子字符串位置:

string="hello"
echo `expr index "$string" e`  # 输出2

在这里插入图片描述

四、Shell参数传递

执行Shell脚本时可以传递参数,脚本内通过$n获取:

#!/bin/bash
echo "第一个参数为: $1"
echo "第二个参数为: $2"

特殊参数:

  • $#:传递到脚本的参数个数
  • $*:所有参数作为一个字符串显示
  • $@:所有参数作为独立字符串显示
  • $$:脚本运行的当前进程ID
  • $?:最后命令的退出状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、Shell运算符

5.1 算术运算符

使用expr进行算术运算:

val=`expr 2 + 2`
echo $val  # 输出4

在这里插入图片描述
其他算术运算方式:

val=$((1 + 2))
val=$[1 + 2]

5.2 关系运算符

数字比较运算符:

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于
  • -ge:大于等于
  • -le:小于等于
    示例:
if [ $a -eq $b ]
thenecho "a等于b"
fi

5.3 字符串运算符

字符串比较运算符:

  • =:字符串相等
  • !=:字符串不等
  • -z:字符串长度为0
  • -n:字符串长度不为0
    示例:
if [ $str1 = $str2 ]
thenecho "两个字符串相同"
fi

5.4 文件测试运算符

文件测试运算符:

  • -f:文件存在且是普通文件
  • -d:文件存在且是目录
  • -r:文件可读
  • -w:文件可写
  • -x:文件可执行
  • -e:文件存在
    示例:
if [ -f "/path/to/file" ]
thenecho "文件存在"
fi

六、 Shell流程控制

6.1 if条件判断

单分支if:

if [ $a -gt $b ]
thenecho "a大于b"
fi

双分支if:

if [ $a -gt $b ]
thenecho "a大于b"
elseecho "a不大于b"
fi

在这里插入图片描述
多分支if:

if [ $a -gt $b ]
thenecho "a大于b"
elif [ $a -lt $b ]
thenecho "a小于b"
elseecho "a等于b"
fi

在这里插入图片描述

6.2 for循环

数值循环:

for ((i=1; i<=5; i++))
doecho "当前值: $i"
done

列表循环:

for var in 1 2 3
doecho "当前值: $var"
done

6.3 while循环

基本while循环:

count=0
num=1
while ((num<=10))
docount=$[$count+$num]let num++
done

无限循环:

while true
doecho "请输入命令:"read cmdif [ "$cmd" == "exit" ]thenbreakfi
done

6.4 case语句

case语法:

case $变量 in
值1)命令1;;
值2)命令2;;
*)默认命令;;
esac

示例:

echo "输入1-3的数字:"
read num
case $num in
1) echo "你输入了1" ;;
2) echo "你输入了2" ;;
3) echo "你输入了3" ;;
*) echo "输入错误" ;;
esac

七. Shell函数

7.1 函数定义与调用

基本函数:

function print() {echo "hello"echo "你好"
}
# 调用函数
print

7.2 函数参数

带参数的函数:

function sum() {echo "参数1: $1"echo "参数2: $2"return $(($1+$2))
}
sum 10 20
echo "结果: $?"

7.3 函数返回值

函数返回值:

function getMax() {if [ $1 -lt $2 ]thenreturn $2elsereturn $1fi
}
getMax 10 20
echo "最大值: $?"

八、 Shell数组

8.1 数组定义

定义数组:

array_name=(value1 value2 value3)

或通过索引定义:

array_name[0]=value0
array_name[1]=value1

8.2 数组操作

读取数组元素:

echo ${array_name[0]}

获取所有元素:

echo ${array_name[*]}
echo ${array_name[@]}

获取数组长度:

echo ${#array_name[*]}

8.3 数组遍历

for循环遍历:

my_arr=(AA BB CC)
for var in ${my_arr[*]}
doecho $var
done

索引方式遍历:

my_arr_num=${#my_arr[*]}
for ((i=0; i<$my_arr_num; i++))
doecho ${my_arr[$i]}
done

九. 加载其他文件变量

可以在一个Shell脚本中包含其他Shell脚本:

source filename
# 或
. filename

示例:
test1.sh:

#!/bin/bash
my_arr=(AA BB CC)

test2.sh:

#!/bin/bash
source test1.sh
for var in ${my_arr[*]}
doecho $var
done

结语

  通过本文的系统学习,您已经掌握了Shell编程的核心概念和实用技巧。从基础语法到流程控制,从函数使用到数组操作,Shell脚本为Linux系统管理和自动化任务提供了强大的工具。
  记住,Shell编程的精髓在于实践。建议您从简单的脚本开始,逐步尝试更复杂的任务,如系统监控、日志分析、批量处理等。随着经验的积累,您将能够编写出高效、健壮的Shell脚本,大幅提升工作效率。
  Shell编程的世界广阔而精彩,愿您在这条路上不断探索,收获知识与成就!

http://www.dtcms.com/a/355457.html

相关文章:

  • 流线型(2型)通风排烟天窗/TPC-A2
  • LoRA modules_to_save解析及卸载适配器(62)
  • C语言学习-24-柔性数组
  • 科技守护古树魂:古树制茶行业的数字化转型之路
  • TikTok 在电脑也能养号?网页端多号养号教程
  • 损失函数,及其优化方法
  • [Ai Agent] 从零开始搭建第一个智能体
  • 麒麟操作系统挂载NAS服务器
  • 搜维尔科技核心产品矩阵涵盖从硬件感知到软件渲染的全产品供应链
  • 12KM无人机高清图传通信模组——打造未来空中通信新高度
  • hintcon2025 Pholyglot!
  • 辅助驾驶出海、具身智能落地,稀缺的3D数据从哪里来?
  • kubernetes-ubuntu24.04操作系统部署k8s集群
  • 吃透 OpenHarmony 资源调度:核心机制、调度策略与多设备协同实战
  • Linux(二) | 文件基本属性与链接扩展
  • ManusAI:多语言手写识别的技术革命
  • SLF4J和LogBack
  • Linux 命令使用案例:文件和目录管理
  • 从0开始学习Java+AI知识点总结-27.web实战(Maven高级)
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-图像滤波与处理技术
  • python自动化测试工具selenium使用指南
  • AS32S601抗辐照MCU在商业卫星EDFA系统中的应用研究
  • 基于 Selenium 和 BeautifulSoup 的动态网页爬虫:一次对百度地图 POI 数据的深度模块化剖析
  • 033 日志
  • 硬件三人行--运算基础篇
  • 怎样将Word转成高质量的DITA
  • 【涂鸦T5】1. 环境搭建和demo
  • 量化策略布林带解读
  • Java Spring(1)- Spring基础
  • AI提升SEO关键词效果新策略