shell脚本

如何加密Shell脚本 如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell脚本。SHC是指:Shell脚本编译器(Shell Script Compiler)。 环境 Centos8 安装shc [root@localhost ~]# yum -y install shc 创建一个shell脚本 下面创建一个脚本文件: [root@localhost ~]# vim w 阅读详情

脚本的概念:

如被大家熟知的python脚本、JavaScript脚本和游戏领域经常使用的lua脚本以及今天要说的linux下的shell脚本,它们的共同点就是不需要编译而可以被直接解释并且执行的一种程序。脚本语言也因此被称为动态语言。

在linux下,默认的脚本语言是bash shell脚本。shell译为贝壳,在此处为linux外壳的意思。shell脚本可以理解为一些linux指令的集合。脚本在运维方向以及自动化控制中有着不可或缺的地位,许多项目需要通过脚本运行各种重复的命令来处理相关事务。以下是一个简单的shell脚本例子:

#!/bin/bash

#输出
echo "hello bash shell!"

#!/bin/bash 是程序的开始,必须放在shell脚本的第一行,#!用来告诉系统/bin/bash是用来执行本文件的程序。echo 是shell脚本的输出命令如C语言的printf,以上脚本简单的输出了一句hello bash shell语句。

当在linux下使用vi命令编写并保存好一个脚本后,如hello.sh。可以通过bash hello.sh 运行此脚本。也可以通过chmod命令改变脚本的执行权限。如chmod 775 hello.sh后,可以通过./hello.sh来执行脚本。

shell单行注释:

除第一行#!标识解释器外,其余的#开头的语句表示单行注释。从#开始直到该行的结束为注释部分,如上文的#输出。注释不会在运行结果中打印出来,会被解释器忽略,但是通过注释可以极大的增强脚本的可读性。

多行注释:

#!/bin/bash

:<<BLOCK
echo "note"
echo "lines"
BLOCK

使用:<<BLOCK  BLOCK 符号可以对多行命令进行注释。

shell脚本变量与运算符

1、变量定义与赋值操作:

gl@gl:~$ var=hello
gl@gl:~$ echo $var
hello

shell通过$符号来取一个变量中的值,如上,var存放的是hello字符串,通过$符号取出hello,然后经echo命令打印出来。

1)赋值时,字符串直接不能有空格,否则赋值会失败。

gl@gl:~$ var=hello world
No command 'world' found, did you mean:
 Command 'tworld' from package 'tworld' (universe)
world: command not found

除非是有双引号"或者单引号'包裹起来。

gl@gl:~$ var="hello world"
gl@gl:~$ echo $var
hello world

2)单引号'和双引号的"区别
双引号:

gl@gl:~$ a="next"
gl@gl:~$ b="$a again"
gl@gl:~$ echo $b
next again

单引号:

gl@gl:~$ a="next"
gl@gl:~$ b='$a again'
gl@gl:~$ echo $b
$a again

可以看到,单引号中的$a保持原样输出。而双引号中的$a会替换成其变量值。

2、算术运算符

gl@gl:~$ a=100
gl@gl:~$ b=200
gl@gl:~$ var=`expr $a + $b`
gl@gl:~$ echo $var
300

通过expr关键字可以实现a变量和b变量的值相加操作。解释一下 ` (键盘感叹号的左边)符号的作用。
即在该符号中的命令会被执行。

常用的算术运算符
运算符    说明    举例
+           加法      expr $a + $b 结果为 30。
-            减法      expr $a - $b 结果为 10。
*            乘法      expr $a \* $b 结果为 200。
/            除法      expr $b / $a 结果为 2。
%          取余      expr $b % $a 结果为 0。
=           赋值      a=$b将把变量 b 的值赋给 a。
==         相等      用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=          不相等  用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

3、关系运算符

#!/bin/bash

a=200
b=200

if [ $a -eq $b ]
then
    echo true
else
    echo false
fi

以上代码表示如果a的值和b的值相等,输出true,否则输出false。

常用的关系运算符
运算符    说明                                                          
-eq         检测两个数是否相等,相等返回 true。    [ $a -eq $b ] 
-ne         检测两个数是否相等,相等返回 false。  
-gt          检测左边的数是否“大于”右边的,如果是,则返回 true。        
-lt           检测左边的数是否“小于”右边的,如果是,则返回 true。       
-ge        检测左边的数是否“大于等于”右边的,如果是,则返回 true。 
-le         检测左边的数是否“小于等于”右边的,如果是,则返回 true。  

4、布尔运算符 

常用的布尔运算符如下
运算符         说明                                                                   
!    非运算,表达式为 true 则返回 false,否则返回 true。  [ ! false ] 
-o    或运算,有一个表达式为 true 则返回 true。                [ $a -lt 20 -o $b -gt 100 ] 
-a    与运算,两个表达式都为 true 才返回 true。                [ $a -lt 20 -a $b -gt 100 ] 

5、字符串运算符 

常用的字符串运算符如下
运算符    说明                                                              
=      检测两个字符串是否相等,相等返回 true。         [ $a = $b ] 
!=     检测两个字符串是否相等,不相等返回 true。     [ $a != $b ] 
-z     检测字符串长度是否为0,为0返回 true。            [ -z $a ] 
-n     检测字符串长度是否为0,不为0返回 true。        [ -n $a ] 

6、文件测试运算符 

常用的文件测试运算符如下
运算符    说明                                                                                                                      
-b file    检测文件是否是块设备文件,如果是,则返回 true。                                [ -b $file ]
-c file    检测文件是否是字符设备文件,如果是,则返回 true。                                        
-d file    检测文件是否是目录,如果是,则返回 true。                                                   
-f file    检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。   
-g file    检测文件是否设置了 SGID 位,如果是,则返回 true。                
-k file    检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。   
-p file    检测文件是否是具名管道,如果是,则返回 true。                        
-u file    检测文件是否设置了 SUID 位,如果是,则返回 true。                 
-r file    检测文件是否可读,如果是,则返回 true。                                  
-w file    检测文件是否可写,如果是,则返回 true。                                
-x file    检测文件是否可执行,如果是,则返回 true。                               
-s file    检测文件是否为空(文件大小是否大于0),不为空返回 true。    
-e file    检测文件(包括目录)是否存在,如果是,则返回 true。             

shell控制结构

shell脚本的控制结构与C语言的有所不同,但是运用上大同小异。

if-else

#!/bin/bash

var1="hello"
var2="hello"

if [ "$var1" == "$var2" ]
then
    echo "ture"
else
    echo "false"
fi

需要注意的是[ ]左右必须加空格与变量隔开。fi表示if结构的结束,如C语言中的}括号。

for循环:

#!/bin/bash

vars="a b c d"
for var in $vars
do
    echo $var
done

gl@gl:~/shellSet$ bash if.sh 
a
b
c
d
 

while循环:

#!/bin/bash

#输出0-100的和
var=1
sum=0
while [ $var -le 100 ]
do
    sum=`expr $var + $sum`
    var=`expr $var + 1`
done
echo $sum

​

gl@gl:~/shellSet$ bash while.sh 
5050

for和while以do开始,done表示结束。

case分支:

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,
如果匹配成功,执行相匹配的命令。

case语句格式如下:

case $var in
a)
    echo "aaa"
    ;;                   #表示一个case的结束
b)
   echo "bbb"
    ;;
*)                     #*表示其他
    echo "ccc"
    ;;
esac    #表示结束

case工作方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。
取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;; 。

STM32 RTC_WaitForSynchro()死循环问题分析与LSI时钟优化实践 本文深入分析了STM32使用LSI时钟源时,调用RTC_WaitForSynchro()函数陷入死循环的根本原因。问题核心在于RTC时钟域未正确使能,导致硬件同步标志RSF无法置位。文章提供了通过显式调用RCC_RTCCLKCmd(ENABLE)函数启用RTC时钟总开关的解决方案,并分享了编写健壮RTC/BKP初始化代码、增加超时机制等最佳实践,确保系统稳定运行。 阅读详情

相关推荐

Unity URP半透明物体渲染避坑指南:双面渲染与深度写入的实战技巧

本文深入探讨了Unity URP中半透明物体自交叠渲染问题的核心根源与解决方案。针对模型自身交叠导致的排序错误,文章提供了双面渲染与深度写入两种实战技巧,详细分析了其实现原理、性能开销及适用场景,帮助开发者根据项目需求选择最优方案,有效提升玻璃、水体等材质的视觉表现。

sunny的博客 545

C Shell 详解

csh

weixin_53812805的博客 1万+

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

搭建仿真的环境,导入VEINS和INET开源库,使用INET库中提供的网络协议和功能模型来模拟通信协议和网络功能,使用SUMO创建道路网络和车辆轨迹,并导出到OMNeT++中 在OMNeT++中使用VEINS通过socket和SUMO连接,借助VEINS实现的TRACI接口来设置车辆相关的行为和场景,最后在OMNET++中结合VEINS,SUMO和INET运行联合仿真实验,并分析车辆在遇到紧急情况下的通信状况和具体行为

mjmmm的博客 1万+

shell python -c_python, shell, C/C++ 从命令行获得参数

前言:在给nagios开发监控插件的时候,不论是用哪种语言写插件,最好能从命令行获得参数(警告值和报警值:-w warning_value -c critical_value),而不是在插件里把这两个值写进去,通常情况下会随着环境改变而更改警告和报警值。python: 通过sys模块实现官方文档:sys.argvThe list of command line arguments passed t...

weixin_29611573的博客 420

避坑指南:Zabbix poller进程100%占用的5种常见原因及解决方案

本文深入剖析了Zabbix poller进程占用率高达100%的五大常见原因,包括监控项与进程数不匹配、不可达主机资源浪费、数据库性能瓶颈、监控项配置不合理以及版本缺陷。文章提供了从系统化诊断到针对性解决方案的完整指南,并重点介绍了如何通过优化zabbix_server.conf中的StartPollers等关键参数进行有效调优,帮助运维人员从根本上解决这一经典性能问题。

7z8x2c4v6b9的博客 249

人工智能_大模型095_Web版003_deepseek R1本地安装_私有化部署_支持RAG_调用HTTPAPI做自己的AI应用_安装RagFlow以及使用_---人工智能工作笔记0240

这里的一定要注意,是资源不够用了,可以点击ragflow-server左边的小绿点,查看 结果。注意去把内存改成10G把至少,我这里改成了10G,因为电脑一共就16G,再试试吧.可以看日志,就显示的是没有连接上mysql,结果我一看,mysql,根本没启动.然后下面选择general就可以了,然后点击确定,然后再去点击。手动去启动,然后再去试试,注意,内存这里给8G太小了还是.调成8G了,然后硬盘大了大了一些换成50G了,然后。点击系统模型设置可以看到,选择聊天模型就可以了,

添柴程序猿的专栏 446

shell python -c_python执行shell命令 | C/C++程序员之家

sudo pip install expect一个远程复制的python类:class RemoteShell:def __init__(self, host, user, pwd):self.host = hostself.user = userself.pwd = pwddef put(self, local_path, remote_path):scp_put = '''settime...

weixin_39631094的博客 586

基于STM32的智能婴儿床设计(蓝牙通信+摄像头监控)_315

本项目设计并实现了一款基于STM32微控制器的智能婴儿床系统,通过多种传感器和智能控制模块为家长提供更便捷和高效的婴儿照护解决方案。系统包括婴儿哭泣检测、湿度监测、空气质量检测、温度监控等多项功能,并通过蓝牙与手机APP进行数据传输和远程控制。婴儿床内置摇摇床和安抚音乐播放功能,能够在婴儿哭泣时自动启动摇摇床并播放安抚音乐。此外,系统还支持摄像头远程监控,让家长实时查看婴儿的状态。整个系统采用STM32F103RCT6作为核心控制单元,结合声音传感器、湿度传感器、MQ135空气质量传感器。

863

shell调用python函数

一、python脚本 #!/usr/bin/env python #-*- coding:utf-8 -*- #scriptname:test.py def get_foo(): return "foo" def get_bar(): return "bar" 二、调用 1、通过shell调用里面的get_foo,只需要在shell中执行一个调用的命令行即可 python -...

******* ▄︻┻┳═一 ******* 5818

2024年下半年网络规划设计师论文真题

3、深入论述自身参与的工业网络是如何实施的,为实现制造业的智能化,如何实现数据的跨系统互通,促进各种工业数据的充分流动和无缝集成以及数据安全。3、结合自身参与的网络建设,详细叙述针对该网络“去NAT”的规划和设计方案。4、在实施过程中遇到的问题以及如何处理,项目实施后的效果和评价。2、大型园区网络“去NAT”改造和业务融合的整体架构。1、“网络去NAT”对推进ipv6演进和应用的意义。4、改造过程中遇到的问题及解决方案。2、简要叙述自身参与的制造网络建设。1、网络规划在智能制造中的意义。

鹿鸣天涯 2364

基于锁相环的高精度频率分频器simulink建模与仿真

在现代电子系统中,高精度频率分频器扮演着至关重要的角色。它能够提供精确的频率参考,广泛应用于通信、仪器仪表、航空航天等领域。基于锁相环的高精度频率分频器具有结构简单、性能稳定等优点,成为了研究的热点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 776

shell脚本——调试(-n / -x /-c)

我们在前面介绍的调试手段是通过修改shell脚本的源代码,从其输出相关的调试信息来定位错误的,那有没有不修改源代码来调试shell脚本的方法呢?有的,那就是使用shell的执行选项,下面将介绍一些常用选项的用法:-n 只读取shell脚本,但不实际执行-x 进入跟踪方式,显示所执行的每一条命令-c "string" 从strings中读取命令"-n"可用于测试shell脚本是否存在语法错误,但不会...

杰儿__er 的博客 4万+

AgentScope Java 入门:Spring AI Alibaba 与 AgentScope 的定位与区别

摘要:Spring AI Alibaba是阿里基于Spring AI开发的本地化AI应用框架,旨在服务Java开发者。它提供模型接入、函数调用、RAG等功能,并与阿里云基础设施深度集成。同时,阿里开源了多智能体框架AgentScope,其Java版(AgentScope-Java)专注于Agentic设计理念。两者将协同发展:Spring AI Alibaba侧重Spring生态集成,AgentScope-Java强化智能体能力。未来计划包括支持AgentScope、升级Admin平台,以及推进Server

SmartSi 1528

shell 脚本入门

一、什么是shell 脚本: 如果此时需要在终端中输入一系列命令完成一些操作,但是我们一条一条输入命令,这样就会很麻烦。那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?有!就是 shell 脚本! shell 脚本类似 windows 的批处理文件,shell 脚本就是将连续执行的命令写成一个文件。 shell 脚本提供数组、循环、条件判断等功能。shell 脚本一般是 Linux 运维或者系统管理员需要掌握的。 二、shell 脚本写法: shell 脚本是个纯文本文件,命令

莘莘的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

如何编写Shell脚本

什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。shell script是一种解释型语言,必须由解释器来执行这些脚本,执行时,解释器将脚本一行一行地转换为代码。 这个解释器就是Shell,它是一个用 C 语言编写的程序。常见的Shell有Bourne Shell(/usr/bin/sh或/bin/sh)和Bourne Again Shell...

施勇 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

简单的Shell脚本

Shell 是一个C 语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给 Shell 处理。Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。shell编程通常指的是学习shell命令语法后,利用这套语法开发脚本程序,操作、访问内核服务。而不是使用C语言去编写一个shell程序。

m0_70882914的博客 1298

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

shell脚本竟如此简单【shell脚本基础】

学习shell脚本基础编程

Parzaifal的博客 1233

什么是Shell脚本以及Shell脚本的基础语法

Shell是操作系统的命令解释器(Command Interpreter),它接收用户输入的命令,将其翻译为内核能理解的指令,并返回执行结果。广义 Shell:指所有命令行界面(如 Bash、Zsh、Fish)狭义 Shell:特指—— Linux 默认 Shellsh(Bourne Shell):原始 Unix Shellbash(Bourne Again Shell):Linux 主流,兼容 shzsh:功能增强版,macOS 默认(自 Catalina 起)csh/tcsh。

2203_75492008的博客 5216

Shell脚本基础

shell 是一种脚本语言 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)打开文本编辑器(vi/vim),新建一个文件first.sh,扩展名为sh(sh代表shell)。扩展名并不 影响脚本执行。 运行Shell脚本方式1. 作为可执行程序 将上面的代码保存为first.sh,并cd到相应目录: $ chmod +x first.sh $ ./first.s

Z2460986913的博客 786

Shell脚本编程

在Linux内核与用户之间的解释器程序Linux默认解释器为/bin/bash负责向内核翻译及传达用户/程序指令相当于操作系统的“外壳”提前写好可执行语句,能够完成特定任务的文件顺序、批量化处理解释型程序常见的脚本语言:bash,python,jsp,php,ruby等脚本创建“三步走”新建文本文件(shell脚本)添加可执行的脚本语句(命令行)添加x执行权限。

qq_45585805的博客 1270

vi新建一个shell脚本_编写第一个Shell脚本

Linux中有好多中不同的shell,bash是linux默认的shell,免费且容易使用。su切换为root权限1.创建shell脚本touch hello.sh2.编辑:vi hello.sh内容#! /bin/bash#the first programecho "hello world"3.保存并退出按Esc取消插入,输入:wq保存==================可以使用bash运行h...

weixin_28864249的博客 6135

Linux Shell 和 Shell 脚本简介

负责为用户提供接口以便他/她可以访问 shell 的程序。它基本上允许用户在基于文本的界面中输入命令并查看这些命令的输出。为自动化和执行复杂任务而编写的大型脚本在终端中执行。要访问终端,只需在搜索框中搜索“终端”并双击它。打开终端在这里,您可以看到 Red Hat Linux 的终端外观。终端Shell 脚本通常,shell 是交互式的,这意味着它们接受来自用户的命令作为输入并执行它们。但是,有时我们想例行公事地执行一堆命令,因此我们每次都必须在终端中输入所有命令。

jianqimingtian的博客 923

openEuler中shell脚本

openEuler中shell脚本使用

m0_45861121的博客 4660
上一篇: std::vector与std::list的区别
下一篇: c++字节对齐规则
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值