Shell编程入门

article/2025/10/8 6:28:06

文章目录

  • 1 Shell编程简介
  • 2 Shell脚本的执行方式
  • 3 Shell变量
    • 3.1 Shell变量介绍
    • 3.2 定义变量的规则
    • 3.3 将命令的返回值赋给变量(重点)
  • 4 设置环境变量
  • 5 位置参数变量
  • 6 预定义变量
  • 7 运算符
  • 8 条件判断
    • 8.1 基本介绍
    • 8.2 if 判断
    • 8.3 case 语句
  • 9 循环语句
    • 9.1 for 循环
    • 9.2 while 循环
  • 10 read 读取控制台输入
  • 11 函数
    • 11.1 系统函数
    • 11.2 自定义函数


1 Shell编程简介

Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

(1)Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。
(2)对于 JavaEE 和 Python 程序员来说,需要编写一些 Shell 脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
(3)对于大数据程序员来说,需要编写 Shell 程序来管理集群。

2 Shell脚本的执行方式

脚本格式要求

(1)脚本以 #!/bin/bash 开头
(2)脚本需要有可执行权限

例如:创建一个 Shell 脚本,输出 hello world!

#! /bin/bashecho "hello world!"

在这里插入图片描述

3 Shell变量

3.1 Shell变量介绍

Linux Shell 中的变量分为系统变量和用户自定义变量。
系统变量:$HOME$PWD$SHELL$USER 等等

(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly 变量,注意:不能 unset

#! /bin/bash# 输出系统变量
echo "PATH=$PATH"
echo "USER=$USER"

在这里插入图片描述

#! /bin/bashA=100
echo "A=$A"
unset A
echo "A=$A"# 定义和使用静态变量
readonly B=90
echo "B=$B"
# 静态变量不能unset
unset B
echo "B=$B"

在这里插入图片描述

3.2 定义变量的规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
(2)等号两侧不能有空格
(3)变量名称一般习惯为大写。

3.3 将命令的返回值赋给变量(重点)

(1)A=`ls -la`反引号,运行里面的命令,并把结果返回给变量 A
(2)A=$(ls -la)等价于反引号
#! /bin/bashRESULT=`ls -l /root`
echo $RESULT
echo "-----------"
MY_DATE=$(date)
echo "date=$MY_DATE"

在这里插入图片描述

4 设置环境变量

基本语法

(1)export 变量名=变量值:将shell变量输出为环境变量
(2)source 配置文件:让修改后的配置信息立即生效
(3)echo $变量名:查询环境变量的值

在 /etc/profile 文件中定义 TOMCAT_HOME 环境变量

# 定义一个自己的环境变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME

查看环境变量 TOMCAT_HOME 的值
(注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效:source /etc/profile
在这里插入图片描述

在另一个 shell 程序中使用 TOMCAT_HOME

#! /bin/bash# 使用我们自定的环境变量
echo "tomcat_hmoe=$TOMCAT_HOME"

在这里插入图片描述

5 位置参数变量

当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如 :./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息

基本语法

$n :n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$* :这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#:这个变量代表命令行中所有参数的个数

#! /bin/bash# 获取到各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"

在这里插入图片描述

6 预定义变量

就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用

基本语法

$$ :当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)
$? :最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了

#! /bin/bashecho "当前的进程号=$$"# 后台的方式运行 test.sh
./test1.sh &
echo "最后的进程号=$!"
echo "执行的值=$?"

在这里插入图片描述

7 运算符

基本语法

(1) $((运算式))$[运算式]
(2)expr m + n 注意 expr 运算符间要有空格
(3)expr m - n
(4)expr \*, /, % :乘,除,取余

#! /bin/bash# 第一种方式$()
RESULT1=$(((2 + 5)*4))
echo "result1=$RESULT1"# 多行注释
:<<!
第二种方式[]
推荐
!
RESULT2=$[(2 + 7)*3]
echo "result2=$RESULT2"# 第三种方式,使用expr
TMP=`expr 2 + 3`
RESULT3=`expr $TMP \* 4`
echo "result3=$RESULT3"# 求两个参数的和
SUM=$[$1+$2]
echo "sum=$SUM"

在这里插入图片描述

8 条件判断

8.1 基本介绍

基本语法

[ condition ](注意 condition 前后要有空格),非空返回 true,否则返回false

常用判断条件

(1)两个整数的比较=字符串比较
-lt 小于
-le 小于等于
-eq 等 于
-gt 大于
-ge 大于等于
-ne 不等于

(2)按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限

(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录

#! /bin/bash# 案例1 "ok"是否等于"ok"
if [ "ok" = "ok" ]
thenecho "equal"
fi# 案例2 25是否大于20
if [ 25 -gt 20 ]
thenecho "大于"
fi# 案例3 /root/bbb 目录中的文件是否存在
if [ -e /root/bbb/test.txt ]
thenecho "存在"
fi

在这里插入图片描述

8.2 if 判断

基本语法

if [ 条件判断式 ];then程序
fiif [ 条件判断式 ]
then程序
elif [ 条件判断式 ]
then程序
fi

案例

#! /bin/bash# 案例:请编写一个shell程序,如果输入的参数大于等于60,则输出及格,否则输出不及格if [ $1 -ge 60 ]
thenecho "及格"
elif [ $1 -lt 60 ]
thenecho "不及格"
fi

在这里插入图片描述

8.3 case 语句

基本语法

case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

案例

#! /bin/bash# 案例:当命令行参数是1时,输出"周一", 是2时,就输出"周二",其它情况输出"other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

在这里插入图片描述

9 循环语句

9.1 for 循环

基本语法1

for 变量 in 值1 值2 值3…
do程序
done

基本语法2

for (( 初始值;循环控制条件;变量变化 ))
do程序
done

案例

#! /bin/bash# 案例1 打印命令行输入的参数# 使用 $*
for i in "$*"
doecho "the num is $i"
done
echo "-----------------"
# 使用 $@
for j in "$@"
doecho "the num is $j"
done
echo "-----------------"# 案例2 从1加到100的值输出显示# 定义一个变量
SUM=0
for((i=1;i<=100;i++))
doSUM=$[$SUM+$i]
done
echo "sum=$SUM"

在这里插入图片描述

9.2 while 循环

基本语法

while [ 条件判断式 ]
do程序
done

案例

#! /bin/bash# 案例 从命令行输入一个数 n,统计从 1+..+ n 的值是多少SUM=0
i=1
while [ $i -le $1 ]
doSUM=$[$SUM+$i]i=$[$i+1]
done
echo "sum=$SUM"

在这里插入图片描述

10 read 读取控制台输入

基本语法

read(选项)(参数)

选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:
变量:指定读取值的变量名

案例

#! /bin/bash# 案例1 读取控制台输入一个num值read -p "请输入一个数num1=" NUM1
echo "你输入的值是num1=$NUM1"# 案例2 读取控制台输入一个num值,在10秒内输入read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"

在这里插入图片描述

11 函数

shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。

11.1 系统函数

basename基本语法:

basename [pathname] [suffix]:返回完整路径最后 / 的部分,常用于获取文件名
basename [string] [suffix]:basename 命令会删掉所有的前缀,包括最后一个/字符,然后将字符串显示出来。suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

dirname基本语法:返回完整路径最后/ 的前面的部分,常用于返回路径部分。
dirname 文件绝对路径 :从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

在这里插入图片描述

11.2 自定义函数

基本语法

[ function ] funname[()]
{
Action; 
[return int;]
}

调用直接写函数名:funname [值]

案例

#! /bin/bash# 案例 计算输入两个参数的和(read), getSumfunction getSum(){SUM=$[$n1+$n2]echo "和是=$SUM"
}read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2# 调用getSum
getSum $n1 $n2

在这里插入图片描述


参考: https://www.bilibili.com/video/av21303002?p=9


http://chatgpt.dhexx.cn/article/dokGM2O7.shtml

相关文章

Linux Shell编程

Linux Shell编程 一、简述 简单的介绍shell脚本的基本用法。 shell脚本是 由一些按照一定格式组合起来的shell命令 组成。shell脚本不需要编译就可以直接执行&#xff0c;它是边解释边执行的。 二、命令解释器 Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell&a…

Shell编程入门学习

文章目录 Shell编程Shell脚本的执行方式Shell的变量Shell的变量的介绍shell变量的定义 设置环境变量位置参数变量介绍基本语法 预定义变量基本介绍基本语法 运算符基本语法 条件判断判断语句常用判断条件 流程控制if 判断case语句for循环while循环 read读取控制台输入基本语法 …

shell编程

文章目录 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.2.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 基本介绍6.2 基本语法 七…

shell编程入门(一天掌握shell编程)

一、背景 到新公司之后&#xff0c;发现好多地方需要使用shell来编写一些简单的程序来提升自己的工作效率&#xff0c;因此专门B站上查看视频&#xff08;尚硅谷的视频&#xff09;&#xff0c;在这里学习总结下shell编程。 二、shell概述 shell是一个命令行解释器&#xff…

Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

目录 一、Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二、Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变量 5. 预定义变量 三、运算符 四、条件判断 五、流程控制 1. if 语句 2. case 语句 3. fo…

各大常见OJ与推荐OJ汇总(OJ题量统计)

这么长时间了 收集了不少做题的网站 在这里列一列 可以挑自己各方面都喜欢的主用 并没有什么顺序 大家择优选择 Last-Modified: 2023/3 POJ&#xff08;北京大学&#xff09;洛谷CowcoderLibreOJCodeforces&#xff08;俄罗斯&#xff09;东北大学秦皇岛分校oj51Nodhihocoder…

华为OD机试(2023A+B)在线OJ模拟

语言支持 CCJavaJavaScript&#xff08;Node.js-CJS、Node.js-ESM&#xff09;Python&#xff08;Python3、PyPy3、Python3-Graphics&#xff09;Mono C#GoRubyRustSQLHaskellBashJuliaKotlin/JVMFortranPascalPHPVerilog 用例库说明 在线OJ中的题目用例均来自本人构思&#…

在线OJ注意事项

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 一、OJ概念 online judge&#xff0c;简称OJ&#xff0c;是一个在线的判题系统。 用户可以在线提交多种程序代码(比如&#xff1a;C、C、Java、Python等)&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计…

在线OJ系统

在线OJ系统 项目开始之前需要准备的第三方库项目分析 两大模块在线编译模块整体思路编译模块 题目管理模块数据存储页面显示服务器 项目开始之前 需要准备的第三方库 httplib g版本必须得是4.9以上 ctemplate boost&#xff1a; yum install boost-devel.x86_64 jsoncpp&a…

分享一个OJ平台——浙江工商大学的OJ平台

1.引言 最近是有总喜欢讨论算法题&#xff0c;因为他们在准备考研复试&#xff0c;为什么我不准备呢&#xff1f;这是一个悲伤的故事&#xff0c;刚好自己也有面试遇到只能使用C和C的代码题&#xff0c;他们说这OJ平台相对简单一些&#xff0c;那些刷不来LeetCode可以试试这个&…

算法OJ题(1)

1.删除有序数组中的重复项 原题链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ 思路&#xff1a;使用双指针算法可以使时间复杂度达到O(1). 具体过程&#xff1a;&#xff08;以画图解释&#xff09; 代码实现&#xff1a; int remove…

你想知道刷题的秘密吗?一篇博客让你明白什么是OJ题,如何刷OJ题,并深入浅出的带你刷遍顺序表的OJ题(小白必看)

目录 0.前言 1.什么是OJ 1.1 OJ简述 1.2 OJ的分类&#xff08;尤其接口型OJ&#xff0c;带你剖析得明明白白&#xff09; 1.3 接口型OJ的输入型参数 2. 剑指 Offer 56 - I. 数组中数字出现的次数 3. 88. 合并两个有序数组 4. 27.移除元素 5. 26. 删除有序数组中的重复…

Online Judge系统(简称OJ)

什么是OJ Online Judge系统&#xff08;简称OJ&#xff09;是一个在线的判题系统。用户可以在线提交程序源代码&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比…

OJ的介绍以及使用方法

OJ系统简介 Online Judge系统&#xff08;简称OJ&#xff09;是一个在线的判题系统。用户可以在线提交程序多种程序&#xff08;如C、C&#xff09; 源代码&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提…

C++-OJ

题目源自某高校C的OJ 本文字数过多&#xff0c;所有代码&#xff0c;都在这里 将做过的C OJ题目整理合并了一下&#xff0c;总共有一百多道题目&#xff0c;手动合并自然是不可能的 这个时候我们就可以使用shell脚本来取代这种机械化的重复劳动了&#xff0c;由于写成博客需要…

杭电OJ刷题指南(ACM)

除了杭电OJ&#xff0c;还有北大OJ&#xff0c;华科OJ等。 1.首先&#xff0c;打开百度&#xff0c;输入“杭电OJ”进行搜索 2.然后进入杭电OJ官网&#xff0c;进行注册 3.输入注册信息 4.接下来进入详细注册界面&#xff0c;将信息填写完整后点击Submit 5.接下来即可登录…

OJ系统

什么是OJ Online Judge系统&#xff08;简称OJ&#xff09;是一个在线的判题系统。用户可以在线提交程序源代码&#xff0c;系统对源代码进行编译和执行&#xff0c;并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比…

最适合编程训练的三大OJ(从易到难)

按照学习的需求来说依次介绍&#xff0c;方便初学者使用&#xff1a; 1.Dotcpp网www.dotcpp.com 优点&#xff1a;全中文OJ&#xff0c;题目分类&#xff0c;有题解 这可能是初学者最好用的OJ甚至没有之一了 全中文的友好操作&#xff0c;充足的语法基础题、二级C语言题、…

各大OJ刷题平台汇总

前言 想成为一名高级工程师&#xff0c;算法还是要有的&#xff0c;至少在入门编程和进入公司之前都是必备的。刷题也可以很好的锻炼动手能力和逻辑思维&#xff0c;今天就给大家介绍一些知名的在线刷题平台,都是干货哦&#xff01; 力扣(leetcode) 江湖人尽皆知的站点&#xf…

OJ的基本原理

OJ的简介&#xff1a;OJ(Online Judge)&#xff0c;就是一个线上判断的接口&#xff0c;通常用于一些比赛中的程序判断&#xff0c;也就是将符合程序的结果放在OJ上&#xff0c;来进行程序验证&#xff0c;后来的大量的互联网公司也开始使用OJ来判断题目的正确性。 OJ的分类 …