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

掌握Shell:从新手到编程大师的Linux之旅

1 shell介绍

1.1 shell脚本的意义

1.记录命令执行的过程和执行逻辑,以便以后重复执行
2.脚本可以批量处理主机
3.脚本可以定时处理主机

1.2 脚本的创建

#!/bin/bash # 运行脚本时候执行的环境

在这里插入图片描述

在这里插入图片描述

1.3 自动添加脚本说明信息

/etc/vimrc # vim主配置文件
~/.vimrc # 该用户环境下的文件
autocmd BufNewFile *.sh,*.script call NOTE()
func NOTE()call append(0,"####################")call append(1,"# Author: sxl")call append(2,"# Version: ")call append(3,"# Create_Time: ".strftime("%Y/%m/%d"))call append(4,"################################################")call append(5,"#!/bin/bash")
endfunc

在这里插入图片描述

1.4 执行shell脚本

当脚本没有可执行权限时候

1.4.1 手动在环境中开启指定解释器

sh script.sh

在这里插入图片描述

1.4.2 直接在当前环境中运行shell中的指令不开启新的shell

source script.sh
. script.sh

在这里插入图片描述

当脚本有可执行权限时候

1.4.3 开启脚本中指定的shell并使用此shell环境运行脚本中的指令

chmod +x script.sh
/xxx/xxx/script.sh
./script.sh

在这里插入图片描述

1.5 调试

sh -x /mnt/westos.sh # 进入debug模式
+ ##运行指令
不带+ ##命令运行的输出

在这里插入图片描述

2 shell变量

2.1 变量的定义

  1. 变量就是内存一片区域的地址
  2. 变量定义的规范性

2.1.1 变量名称

可包含:
字母
下划线_
数字

不能用数字开头

建议:
变量名称短全用大写字符
变量名称长用_区分子类
WESTOS
Westos_Linux
westoS_Linux

2.2 不同级别的变量设定

2.2.1 环境变量

export a=1
在环境关闭后变量失效

在这里插入图片描述

2.2.2 用户级别

vim ~/.bash_profile
export a=1

在这里插入图片描述

2.2.3 系统级别

vim /etc/profile
export a=2
vim /etc/profile.d/westos.sh
export b=3

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

2.3 变量转义

2.3.1 转译

\ #转译单个字符
"" #弱引用,批量转译个数字符 不能转译"\ " "" "$" "!"
'' #强引用

在这里插入图片描述

2.3.2 声明变量及其引用

a=1
echo ${a}b

在这里插入图片描述

2.3.3 变量数组的使用

a=(1 2 3 4 5)
a$[a[@]:起始元素id:元素个数]
echo ${a[0]} ##数组中第一个元素
echo ${a[1]} ##数组中最后一个元素
echo ${a[*]} ##数组中所有元素
echo ${a[@]} ##数组中所有元素
echo ${a[@]:0:3} ##数组中13个元素
echo ${#a[@]} ##数组中元素的个数
unset a[n] ##删除数组中的第n1个元素
unset a ##删除a这个数组

在这里插入图片描述

2.4 命令的别名设定alias

alias xie='vim' ##临时设定
vim ~/.bashrc
alias xie='vim' ##只针对与用户生效
vim /etc/bashrc ##针对系统所以用户生效
alias xie='vim'
unalias xie ##删除当前环境中的alias

在这里插入图片描述

2.5 用户环境变量的更改

设定方式:
~/.bash_profile # 当前用户环境变量
export PATH=$PATH:/mnt
/etc/bash_profile # 整个系统变量
export PATH=$PATH:/mnt

在这里插入图片描述

2.6 直接利用命令执行结果

$()##优先执行
TIME=`date` # 范围更广

在这里插入图片描述

2.7 脚本中的传参

2.7.1 非交互式

非交互模式:
$0 is /mnt/test.sh <!脚本本身>
$1 is westos <!脚本后所输入的第一串字符>
$2 is linux
$3 is redhat
$* is westos linux redhat <!脚本后所输入的所有字符"westos linux redhat">
$@ is westos linux redhat <!脚本后所输入的所有字符'westos' 'linux' 'redhat'>
$# is 3 <!脚本后所输入的字符串个数>

在这里插入图片描述

2.7.2 交互式

read WESTOS ##对westos赋值
read -p "please input word:" ##输出提示语
-s ##隐藏输入内容

在这里插入图片描述

2.8 脚本函数

设定方式:
WORD()
{
action1
action2
}
WORD 在脚本中就代表action1 action2这两个动作

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

3 shell编程流程

3.1 for

for i in 1 2 3 4 5 sxl
doecho $i
done
echo "################"
for i in `seq 1 2 5` # 步长为2
doecho $i
done
echo "################"
for i in {1..5}
doecho $i
done
echo "################"
for ((i=6;i<10;i++))
doecho $i
done

在这里插入图片描述

在这里插入图片描述

3.2 条件

3.2.1 while do

在这里插入图片描述

3.2.2 until do

在这里插入图片描述

3.2.3 if

在这里插入图片描述

3.3 case

执行按钮操作,点名机制,相对于IF语句效率更高

case $1 in
word1|WORD1)
action1
;;
word2|WORD2)
action2
;;
*)
action3
esac

在这里插入图片描述

3.4 expect

3.4.1 shell应答方式

问题expect.sh

#!/bin/bash
read -p "what's your name:" NAME
read -p "How old are you: " AGE 
read -p "Which objective: " OBJ
read -p "Are you ok? " OK
echo $NAME is $AGE\'s old study $OBJ feel $OK

回答answer.sh

/root/Desktop/expect.sh <<EOF
SXL
20
REAHAT
OK
EOF

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

3.4.2 expect应答方式

dnf install expect -y
#!/usr/bin/expect
set timeout 1
set NAME [ lindex $argv 0 ]
set AGE [ lindex $argv 1 ]
set OBJ [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/ask.sh
expect {
"name" { send "$NAME\r";exp_continue }
"old" { send "$AGE\r";exp_continue }
"objective" { send "$OBJ\r";exp_continue }
"ok" { send "$FEEL\r" }
}
expect eof

在这里插入图片描述

在这里插入图片描述

4 shell运算

4.1 运算符号

+ ##加法
- ##减法
* ##乘法
/ ##除法
% ##除法后的余数
** ##乘方
++ ##自加一
-- ##自减一
< ##小于
<= ##小于等与
> ##大于
>= ##大于等与
>= ##等于
+= j+=i ##j=j+i
*= *##j=j*i
/= ##j=j/i
%= ##j=j%i

在这里插入图片描述

4.2 运算指令

(()) ##((a=1+2))
let ##let a=1+2
expr ##expr 1 + 2
bc
bc << EOF
1+2
EOF
$[] ##echo $[1+2]
printf '%0.2f' .3 ==== 0.30
printf '%0.3f' .3 ====0.300
printf '%0.4f' .3 ====0.3000

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

5 脚本练习

5.1 IP采集

ifconfig $* | awk '/inet\>/{print $2}'

在这里插入图片描述

5.2 日志清理

[ "$USER" = "root" ]&&{echo clean ok> /var/log/message
}||{echo clean error
}

在这里插入图片描述

5.3 采集系统登录用户信息

echo -e "hostname:\t$(hostname)"
echo -e "hostname:\t$HOSTNAME"
echo -e "username:\t$USER"
IP=$(ifconfig ens160 | awk '/inet\>/{print $2}')
[ -z "$IP" ]&&{echo -e "ipaddress:\tNONE"
}||{echo -e "ipaddress:\t$IP"
}

在这里插入图片描述

5.4 脚本函数创建用户

ACTION()
{read -p "please name:" NAME[ "exit" = "$NAME" ]&&{exit}id $NAME &> /dev/null &&{echo "user exit"ACTION}||{echo "user not exit"read -p "please input passwd:" PASSWDadduser $NAMEecho $PASSWD | passwd --stdin &> /dev/null &&{echo "$NAME create ok"}ACTION}
}
ACTION

在这里插入图片描述

5.5 检测直连网络中可以与主机通信的主机IP

for ip in {50..64}
doping -w 1 -c 1 192.168.1.$ip &> /dev/null &&{echo 192.168.1.$ip}
done

在这里插入图片描述

5.6 用户建立脚本

5.7 系统CPU使用情况

ps ax -o %cpu | awk 'BEGIN{N=0}!/$CPU|0.0/{N+=$1}END{print "%CPU:\t"N"%"}'

在这里插入图片描述

5.8 倒计时

MIN=1
SEC=60
SECS=$[MIN*60+SEC]
for ((;SECS>0;SECS--))
doMIN=$[SECS/60]SEC=$[SECS%60]echo -ne "$MIN:$SEC"echo -ne '\r'sleep 1
done

在这里插入图片描述

相关文章:

掌握Shell:从新手到编程大师的Linux之旅

1 shell介绍 1.1 shell脚本的意义 1.记录命令执行的过程和执行逻辑&#xff0c;以便以后重复执行 2.脚本可以批量处理主机 3.脚本可以定时处理主机 1.2 脚本的创建 #!/bin/bash # 运行脚本时候执行的环境1.3 自动添加脚本说明信息 /etc/vimrc # vim主配置文件 ~/.vimrc # 该…...

有重复元素的快速排序

当涉及到处理重复元素的快速排序时&#xff0c;可以使用荷兰国旗问题的方法&#xff0c;也就是三路划分。下面是使用 Java 实现的示例代码&#xff1a; import java.util.Arrays;public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (lo…...

Bert浅谈

优点 首先&#xff0c;bert的创新点在于利用了双向transformer&#xff0c;这就跟openai的gpt有区别&#xff0c;gpt是采用单向的transformer&#xff0c;而作者认为双向transformer更能够融合上下文的信息。这里双向和单向的区别在于&#xff0c;单向只跟当前位置之前的tocke…...

产品运营的场景和运营策略

一、启动屏 1&#xff0e;概念 启动屏&#xff0c;特指 APP 产品启动时即显示的界面&#xff0c;这个界面一般会停留几秒钟时间&#xff0c;在这个时间内 APP 会在后台加载服务框架、启动各种服务 SDK 、获取用户地理位置、判断有无新版本、判断用户账户状态以及其他系统级别的…...

C#异常捕获try catch详细介绍

在C#中&#xff0c;异常处理是通过try、catch、finally和throw语句来实现的&#xff0c;它们提供了一种结构化和可预测的方法来处理运行时错误。 C#异常基本用法 try块 异常处理以try块开始&#xff0c;try块包含可能会引发异常的代码。如果在try块中的代码执行过程中发生了…...

切换阿里云ES方式及故障应急处理方案

一、阿里云es服务相关问题及答解 1.1 ES7.10扩容节点时间 增加节点数量需要节点拉起和数据Rebalance两步,拉起时间7.16及以上的新版本大概10分钟以内,7.16以前大概一小时,数据迁移的时间就看数据量了,一般整体在半小时以内 (需进行相关测试验证) 1.2 ES7.10扩容数据节点…...

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…...

无需添加udid,ios企业证书的自助生成方法

我们开发uniapp的app的时候&#xff0c;需要苹果证书去打包。 假如申请的是个人或company类型的苹果开发者账号&#xff0c;必须上架才能安装&#xff0c;异常的麻烦&#xff0c;但是有一些app&#xff0c;比如企业内部使用的app&#xff0c;是不需要上架苹果应用市场的。 假…...

【PTA题目】6-20 使用函数判断完全平方数 分数 10

6-20 使用函数判断完全平方数 分数 10 全屏浏览题目 切换布局 作者 张高燕 单位 浙大城市学院 本题要求实现一个判断整数是否为完全平方数的简单函数。 函数接口定义&#xff1a; int IsSquare( int n ); 其中n是用户传入的参数&#xff0c;在长整型范围内。如果n是完全…...

Nas搭建webdav服务器并同步Zotero科研文献

无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器 文章目录 无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zote…...

一句话总结敏捷实践中不同方法

敏捷实践是指一组优先考虑灵活性、协作和客户满意度的软件开发和项目管理原则和方法。 不同方法论的敏捷实践&#xff1a; 1、敏捷&#xff1a; Sprints&#xff1a;限时迭代&#xff08;通常 2-4 周&#xff09;&#xff0c;在此期间创建潜在的可交付产品增量。每日站立会议…...

【数据结构】线段树(点修区查)

数据结构-线段树&#xff08;点修区查&#xff09; 前置知识 分治递归二叉树 思路 我们需要维护一个支持单点修改&#xff0c;区间查询的数据结构&#xff0c;并且要求在线&#xff0c;一般使用线段树解决。 线段树是一个二叉树形的数据结构。 线段树的思想很简单&#xff0c…...

Ansys Lumerical | 用于增强现实系统的表面浮雕光栅

在本示例中&#xff0c;我们使用 RCWA 求解器设计了一个斜面浮雕光栅 (SRG)&#xff0c;它将用于将光线耦合到单色增强现实 (AR) 系统的波导中。光栅的几何形状经过优化&#xff0c;可将正常入射光导入-1 光栅阶次。 然后我们将光栅特性导出为 Lumerical Sub-Wavelength Model …...

QT day3作业

1.思维导图 2、 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密…...

【Ubuntu】设置永不息屏与安装 dconf-editor

方式一、GUI界面进行设置 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal打开 Ubuntu 桌面环境的设置菜单。你可以通过点击屏幕右上角的系统菜单&#xff0c;然后选择设置。在设置菜单中&#xff0c;…...

gRPC 的原理 介绍带你从头了解gRPC

gRPC 的原理 什么是gRPC gRPC的官方介绍是&#xff1a;gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架&#xff0c;基于 HTTP2 协议设计&#xff0c;序列化使用PB(Protocol Buffer)&#xff0c;PB 是一种语言无关的高性能序列化框架&#xff0c;基于 HTTP2PB 保…...

Apriori算法

Apriori算法由R. Agrawal和R. Srikant于1994年在数据集中寻找布尔关联规则的频繁项集。该算法的名称是Apriori&#xff0c;因为它使用了频繁项集属性的先验知识。我们应用迭代方法或逐层搜索&#xff0c;其中k-频繁项集用于找到k1个项集。 为了提高频繁项集逐层生成的效率&…...

肖sir__linux讲解(2.1)

linux命令 cp 复制命令 a、cp 原文件名称 新文 件名称&#xff08;不存在的文件&#xff09; 案例&#xff1a;cp a k 截图&#xff1a; b.cp 原文件名称 原有文 件名称&#xff08;存在的文件&#xff09; 案例:cp a b 截图&#xff1a; c、cp 指定路径复制 格式&#xff…...

The ultimate UI kit and design system for Figma 组件库下载

Untitled UI 是世界上最大的 Figma UI 套件和设计系统。可以启动任何项目&#xff0c;为您节省数千小时&#xff0c;并祝您升级为专业设计师。 采用 100% 自动布局 5.0、变量、智能变体和 WCAG 可访问性精心制作。 900全局样式、变量&#xff1a;超级智能的全局颜色、排版和效…...

Selenium——利用input标签上传文件

Selenium利用input标签上传文件 完整流程 打开文件上传页面选择要上传的文件点击上传按钮确认文件上传成功介绍怎么方便的获取对应元素的Xpath或者Css 简单介绍 在使用Selenium进行浏览器自动化测试时&#xff0c;文件上传是一个常见的需求。而 标签就是实现文件上传功能的…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...