Linux Shell 脚本入门教程:开启你的自动化之旅

目录

一、什么是Shell?

二、 编写第一个Shell脚本

​编辑

2.2 变量

2.3 功能语句

2.4 数组


一、什么是Shell?

Shell是一种计算机程序,它充当了用户与操作系统之间的接口。在Linux系统中,Shell允许用户通过命令行界面(CLI)来控制计算机。Shell脚本则是一种使用Shell语言编写的脚本,它可以自动执行一系列的命令,帮助用户实现任务自动化,提高工作效率。

二、 编写第一个Shell脚本
  1. 创建脚本文件:使用文本编辑器(如vi、nano)创建文件,推荐扩展名为.sh
  2. 添加执行权限:运行chmod +x filename.sh
  3. 编写脚本:首行添加#!/bin/bash#!/bin/sh作为shebang,指示Shell解释器类型。
    新建一个shell脚本: touch xx.sh
    第一行:#!/bin/bash
    意思是使用/bin/bash来解释执行
    
    执行方式:
    sudo chmod 权限 ./xx.sh  	 #使脚本具有执行权限
    ./xx.sh					 #执行脚本
2.2 变量
  • 自定义变量:通常大写,直接赋值无需类型声明。
一般用大写
进行赋值时用=,左右两边不能有大写
引用变量前面加$

VAR=10
echo $VAR 
#10
  • 位置参数$0代表脚本名称,$1$2, ... 表示参数。
$0或者${0}与输入的命令行一样,表示包含脚本名./xx.sh的参数
$1,$2,$3...表示命令行输入的剩下的参数
$# 表示包含命令行参数的个数(不包含脚本文件名这个参数)
$@ $* 包含命令行所有参数:“$1 $2 $3...”
  • 预定义变量$?记录最后命令的退出状态,$$表示当前进程ID。
$? 包含前一个命令的退出状态(0表示真 非0表示假)
$$ 包含正在执行进程的ID号
  • 环境变量$HOME指向用户主目录,$PATH定义搜索路径。
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
	$HOME: /etc/passwd文件中列出的用户主目录 
	$PATH :shell搜索路径,就是是一系列目录,当执行命令时,linux就在这些目录下查找。
2.3 功能语句
  • 注释:使用#标记。
  • 算术运算exprlet命令。
算数运算符命令expr主要用于进行简单的算数运, 包括+ - \* / %等操作。

#!/bin/bash
VAR=10
NUM=`expr \( 2 + $VAR \) \* 4`
echo $NUM
48
  • 输入读取read命令,read -p提供输入提示。
功能:read从标准输入读入一行,并赋值给后面的变量
格式:read VAR1 VAR2 VAR3
把读入行中的第一个单词赋值给VAR1,第二个单词赋值给VAR2,第三个单词赋值给VAR3,以此类推。
read -p "提示语句" 变量名列表:可以将提示语句输出,同时输入变量。
类似 scanf

read a b c d 

read -p "字符串" a b c d
  • 条件测试test或方括号[]用于测试字符串、整数和文件属性。
可测试对象:字符串 整数 文件属性
每种测试对象都有若干个操作符
字符串的测试:
s1 = s2 测试两个字符串是否完全一样
s1 != s2 测试两个字符串是否有差异
-z s1 测试s1字符串的长度是否为0
-n s1 测试s1字符串的长度是否不为0

整数的测试:
a -eq b  测试a和b是否相等 eqaul
a -ne b 测试a和b是否不相等 not equal
a -gt b 测试a是否大于b grater than
a -ge b 测试a是否大于等于b grater equal
a -lt b 测试a是否小于b litter than
a -le b 测试a是否小于等于b litter equal

(3)文件属性测试:
-d name 测试name是否为一个目录
-f name 测试name是否为普通文件
-e name 测试文件是否存在

#!/bin/bash

#测试字符串
VAR="hello"
test $VAR = "hello"
echo $?

test $VAR != "hello111"
echo $?

#测试整数
NUM=10
test $NUM -eq 1
echo $?

test $NUM -ne 1
echo $?

test $NUM -gt 0
echo $?

test $NUM -lt 0
echo $?

#测试文件
read FILE           #从终端读取一个字符串赋值给变量FILE
test -e $FILE
echo $?

test -d $FILE
echo $?

test -f $FILE
echo $?
  • 控制结构
    • If语句:支持基本、多路和嵌套条件。
基本结构
if 条件
then
    命令1
else
    命令2
fi

多路分支结构:
if 条件1
then 
	命令表1
elif 条件2
then
	命令表2
else 
	命令表3
fi

嵌套结构:
if 条件
then
	if 条件
	then
		命令表1
	fi
else
	命令表2
fi

补充操作符:
-o 或运算		例如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 与运算		例如 [ $a -lt 20 -a $b -gt 100 ] 返回 false
! 非运算		例如 [ ! false ] 返回 true
&& 逻辑与		例如 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑或			例如 [[ $a -lt 100 || $b -gt 100 ]] 返回 true
| 位或			例如 echo $[2|2]
&位与			例如 echo $[2&1] 
  • Case语句:模式匹配。
格式:
case 变量 in
模式1)
	命令表1
	;;
模式2)
	命令表2
	;;
*)
	命令表3
	;;
esac
也可以用+\或者其他的字符来实现输入特殊字符就可以执行命令
  • While循环:基于条件的循环。
格式:
while 命令或表达式
do
	命令表
done

执行顺序:
while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。
  • For循环:遍历列表或范围。
格式
for 变量名 in 单词表
do
	命令表
done

执行顺序:
变量依次取单词表中的各个单词,  每取一次单词, 就执行一次循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。


for语句的几种书写格式:
1)for i in 1 2 3 4  do....done :
		变量i从单词表中取值
2)for i  do...done:
		变量i从命令行取值,可以省略in 单词表
3)for i in {1..10} do...done:
		变量i从1-10个数中取值
4)for ((i = 0; i < 10; i++)) do...done:
	书写格式类似c语言
  • 循环控制breakcontinue分别用于跳出和跳过循环。
break n: 结束n层循环
continue n:结束n层循环,继续下一次循环
for ((i=1;i<5;i++ ))
do
  if [ $i -eq 3 ]
  then
  #  break
  #  continue
  #  exit
  fi
  echo $i
done
echo OK
输出的结果
break的结果
1
2
OK
continue的结果
1
2
4
OK
2.4 数组
  • 赋值:直接赋值或通过read命令。

array=(1 2 3 4 5)
array1=($1 $2 $3 $4)
read a b c
array2=($a $b $c)
read -a array4
  • 引用
    • "${array[i]}"访问特定元素。
    • "${array[@]}"遍历所有元素。
    • "${#array[@]}"获取元素总数。
${array[i]}  #数组下标i从0开始到n-1结束
array[i]=3 #对数组元素重新赋值
${array[@]} #遍历数组
${#array[@]} #计算数组种元素的个数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/771954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows下cmd中cd命令不起作用的原因和解决办法

1. 问题 即便是输入了cd指令&#xff0c;但是并没有跳转。 2. 原因 实际上cmd换目录跨磁盘的话需要先进行磁盘的转换。 3. 解决办法 先执行 D:

闲鱼商品搜索关键词优化攻略

一、闲鱼商品详情关键词搜索概述 闲鱼作为国内最大的二手交易平台之一&#xff0c;其商品搜索功能对于买家和卖家来说至关重要。商品详情页中的关键词搜索功能&#xff0c;可以帮助买家更快速地找到心仪的商品&#xff0c;也可以帮助卖家提高商品的曝光度&#xff0c;从而促进…

工厂自动化相关设备工业一体机起到什么作用?

在当今的制造业领域&#xff0c;工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中&#xff0c;工业一体机作为一种重要的设备&#xff0c;发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…

【3分钟准备前端面试】vue3

目录 Vue3比vue2有什么优势vue3升级了哪些重要功能生命周期变化Options APIComposition APIreftoRef和toRefstoReftoRefsHooks (代码复用)Vue3 script setupsetupdefineProps和defineEmitsdefineExposeVue3比vue2有什么优势 性能更好体积更小更好的TS支持更好的代码组织更好的逻…

【开发笔记】如何用正则匹配出百度云盘分享链接的提取码和链接?

用Wordpress做下载站&#xff0c;需要复制网盘链接到后台的文章发布自定义字段&#xff0c;然后我不想每次手动拆分链接和提取码分别到两个input&#xff0c;就想在后台粘帖时候实现拆分它。 $link 链接&#xff1a;https://pan.baidu.com/s/16y9Z5mTSE6gewStGDNndNQ 提取码…

论文解读——如何生成高分辨率图像PGGAN

论文&#xff1a;Progressive Growing of GANs for Improved Quality, Stability, and Variation&#xff08;2017.10&#xff09; 作者&#xff1a;Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen 链接&#xff1a;https://arxiv.org/abs/1710.10196 代码&#xff1a…

将多个SQL查询合并的两种方式

说明&#xff1a;单个简单查询是非常容易的&#xff0c;但是为了避免多次访问访问数据库&#xff0c;我们会尽可能通过表关联将业务所需要的字段值一次性查出来。而有时候不太清楚表之间的关联关系&#xff08;这取决于对业务的熟悉程度&#xff09;&#xff0c;或者实际情况就…

【SSL 1823】消灭怪物(非传统BFS)

题目大意 小b现在玩一个极其无聊的游戏&#xff0c;它控制角色从基地出发&#xff0c;一路狂奔夺走了对方的水晶&#xff0c;可是正准备回城时&#xff0c;发现地图上已经生成了 n n n 个怪。 现在假设地图是二维平面&#xff0c;所有的怪和角色都认为是在这个二维平面的点上…

甲骨文首次将LLMs引入数据库,集成Llama 3和Mistral,和数据库高效对话

信息时代&#xff0c;数据为王。数据库作为数据存储&管理的一种方式&#xff0c;正在以势不可挡的趋势与AI结合。 前有OpenAI 收购了数据库初创公司 Rockset&#xff0c;引发广泛关注&#xff1b;Oracle公司&#xff08;甲骨文&#xff09;作为全球最大的信息管理软件及服…

基于 Windows Server 2019 部署域控服务器

文章目录 前言1. 域控服务器设计规划2. 安装部署域控服务器2.1. 添加 Active Directory 域服务2.2. 将服务器提升为域控制器2.3. 检查域控服务器配置信息 3. 管理域账号3.1. 新建域管理员账号3.2. 新建普通域账号 4. 服务器加域和退域4.1. 服务器加域操作4.2. 服务器退域操作 总…

谷歌地图 | 路线优化 API 助力企业解锁物流新潜能

在当今竞争激烈的市场环境中&#xff0c;企业面临着越来越大的压力&#xff0c;需要提高运营效率、降低成本并满足不断增长的客户期望。对于依赖车队进行交付或服务的企业来说&#xff0c;这些挑战尤为艰巨。 近日&#xff0c; Google 地图平台路线优化 API 已经正式上线。路线…

推荐 2个功能强大的黑科技工具,真的会让你直呼卧槽

Waifu2X Waifu2x 是一个基于深度学习的开源项目&#xff0c;主要用于处理二次元动漫风格的图像。它使用卷积神经网络&#xff08;CNN&#xff09;进行超分辨率处理和降噪&#xff0c;能够将图像放大2倍或更多&#xff0c;同时显著提高清晰度和减少噪声。Waifu2x 特别针对日系漫…

React 中如何使用 Monaco

Monaco 是微软开源的一个编辑器&#xff0c;VSCode 也是基于 Monaco 进行开发的。如果在 React 中如何使用 Monaco&#xff0c;本文将介绍如何在 React 中引入 Monaco。 安装 React 依赖 yarn add react-app-rewired --dev yarn add monaco-editor-webpack-plugin --dev yarn…

海外短剧CPS推广分佣系统平台讲解,他和短剧播放平台有啥区别?

首先来讲讲什么是海外短剧系统&#xff1f;什么是海外短剧cps系统&#xff1f;这俩有何区别&#xff1f; 海外短剧系统 顾名思义&#xff1a;就是做一套海外短剧系统&#xff0c;把剧放在自己的系统内&#xff0c;让用户来充值&#xff0c;充值的钱全部都是我自己的&#xff…

广州自闭症机构哪家好?

在广州&#xff0c;众多的自闭症康复机构中&#xff0c;星贝育园自闭症儿童康复学校以其独特的优势脱颖而出。 一、专业的师资团队 我们拥有一支经验丰富、专业素养极高的师资队伍。每位老师都经过严格的专业培训&#xff0c;深入了解自闭症儿童的特点和需求。他们不仅具…

数字化工厂EasyCVR视频监控智能解决方案:引领工业4.0时代新趋势

随着工业4.0的深入发展和数字化转型的浪潮&#xff0c;数字化工厂视频监控智能解决方案成为了现代工业生产中不可或缺的一部分。这一解决方案集成了先进的视频监控技术、人工智能&#xff08;AI&#xff09;和大数据分析&#xff0c;为工厂提供了更高效、更安全、更智能的监控和…

css持续学习

一、样式层叠 当一个css样式发生冲突时&#xff0c;比如多处给一个字体设置了不同的颜色&#xff0c;这个时候就需要样式层叠了&#xff0c;它会进行三种比较 比较重要性 重要性从高到低&#xff1a; 1.带有 important 的作者样式&#xff08;作者样式就是开发者写的样式&…

内网穿透--利用everything实现目录映射

免责声明:本文仅做技术交流与学习... 目录 来源文章 frp下载网址 为了隐藏: 演示: 1-靶机的everything开启http服务 2-Linux服务器: 3-靶机windows: 4-最后访问: 来源文章 渗透测试技巧|Everything的利用 frp下载网址 Release v0.58.1 fatedier/frp GitHub 为了隐…

js学习--制作猜数字

猜数字制作 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script>function fun() {alert("1-100猜数字");let num Math.floor(Math.random() * 100) 1;for …

js之模糊搜索

多的不说 少的不唠 直接上代码