灯饰模板网站,wordpress前台显示英文,德州公司做网站,苏州吴中网站建设公司文章目录 一、Linux系统结构二、Shell介绍1、Shell简介2、Shell种类3、Shell查询和切换 三、Shell基础语法1、注释2、本地变量3、环境变量3.1、查看环境变量3.2、临时设置环境变量3.3、永久设置环境变量 4、特殊变量5、控制语句5.1、shell中的中括号5.2、if语句5.3、for循环5.4… 文章目录 一、Linux系统结构二、Shell介绍1、Shell简介2、Shell种类3、Shell查询和切换 三、Shell基础语法1、注释2、本地变量3、环境变量3.1、查看环境变量3.2、临时设置环境变量3.3、永久设置环境变量 4、特殊变量5、控制语句5.1、shell中的中括号5.2、if语句5.3、for循环5.4、while循环5.5、until循环5.6、break和continue语句 6、函数6.1、函数的定义和调用6.2、带参数的函数6.3、将函数定义在 Shell 配置文件中 7、重启springboot项目脚本 四、Shell的执行方式1、使用指定Shell解释器2、使用chmod赋执行权限后运行3、使用当前Shell解释器4、将脚本放入系统PATH 一、Linux系统结构 Linux操作系统是一种开放源代码的类UNIX操作系统它的结构分为内核、Shell和应用程序三个层次。
内核层 内核是Linux系统的核心部分它负责管理系统各种硬件设备、文件系统、内存管理和进程管理等核心任务Linux内核设计了良好的模块化结构可以动态地加载和卸载内核模块这使得内核可以兼容各种不同的硬件设备和外围设备 Shell层 Shell是Linux系统的命令行解释器它负责将用户输入的命令解释并执行Linux系统上有多种Shell其中最常用的是Bash ShellBash Shell 提供了各种丰富的功能和处理能力如通配符、重定向、管道、变量等等 应用层 应用层是Linux系统上的各种应用程序和服务包括文本编辑器、图形界面、Web服务器、邮件服务器、数据库服务器等在Linux系统中应用程序通常以开放源代码方式呈现用户可以自由学习和使用也可以根据需求自己编写、修改或扩展 二、Shell介绍
1、Shell简介
Shell被翻译为“壳”。在Linux内核外面包了一个壳Shell是一种用于与操作系统进行交互的命令行解释器它是一种脚本语言可以通过编写一系列的命令和脚本来执行操作系统的功能和任务我们在终端中编写的命令都是Shell命令。例如ls、grep…等
2、Shell种类
Bourne Shell/bin/sh是Unix系统最早的shell程序由史蒂夫·伯恩斯Steve Bourne编写。该shell程序是许多Linux发行版中默认使用的程序Bourne-Again SHell/bin/bash是GNU项目的一部分是Bourne Shell的增强版目前在大部分Linux发行版中是默认的shell程序C Shell /bin/csh是Bill Joy编写的一个具有面向对象设计理念的shell程序它采用与C语言相似的语法和控制结构。C Shell中的命令提示符为%号TENEX C Shell/bin/tcsh是C Shell的增强版它对历史命令和别名等方面进行了改进同时也支持C Shell中的所有特性。TENEX C Shell中的命令提示符也为%号Korn Shell/bin/ksh是由David Korn编写的shell程序它是Bourne Shell和C Shell的结合拥有两种不同的工作模式交互模式和批处理模式Z Shell/bin/zsh是一个功能强大的shell程序它是Bourne Shell的增强版具有缩写、自动完成、句法高亮等功能同时也支持Korn Shell、C Shell以及Bourne Shell的语法和命令 每种Shell都有其特定的语法和功能但它们通常都具有共同的基本功能如变量操作、条件语句、循环语句和命令执行等。
3、Shell查询和切换 查看已安装的Shell cat /etc/shells查看当前Shell查看$SHELL环境变量 echo $SHELL更改Shell需要重启服务 chsh -s /bin/sh三、Shell基础语法
shell脚本可以编写在一个xxx.sh结尾的文件中xxx.sh文件我们称为shell脚本文件shell脚本文件是一个可执行文件类似于windows环境中的xxx.exe或xxx.bat等文件
1、注释 在Shell脚本中注释是用来解释代码的内容Shell脚本中的注释使用#符号表示任何在#后面的内容都会被Shell解释器忽略。 单行注释用#开头的内容作为注释 # 这是一个单行注释
echo Hello, World! # 这也是一个注释echo命令用于在终端上输出文本或变量的值主要用于显示信息或调试脚本 多行注释可以通过连续的#来实现多行注释 # 这是一个多行注释
# 它可以扩展到
# 多行也可以用以下形式 :
这是一个多行注释
它使用 : 和单引号来包裹
解释器会忽略这些内容示例 一个简单的脚本文件#!/bin/bash在 Shell 脚本的第一行表示该脚本应该用哪个解释器运行可以省略如果省略会使用当前会话的默认shell解释器#!/bin/bash
# 打印 Hello, World!
echo Hello, World!查看文件权限默认没有执行权限 修文件权限添加执行权限chmod x script.sh
# 或者
chmod 744 script.sh执行文件./script.sh2、本地变量 本地变量是指在某个脚本或函数的作用范围内定义的变量只能在该作用范围内访问。本地变量的生命周期仅限于创建它的脚本或函数执行完毕后变量会自动销毁 本地变量命名规则 变量名由字母、数字和下划线组成字母一般是小写环境变量用大写不能以数字开头区分大小写等号两侧不能有空格不能使用特殊字符作为变量名如$、、!、*等 示例 双引号允许引用变量变量会被解析单引号不会解析变量原样输出
#!/bin/bash
nameAliceecho Hello, $name # 输出Hello, Alice
echo Hello, $name # 输出Hello, $name3、环境变量
环境变量是一个包含键值对的变量键变量名和值共同保存系统配置信息或用户定义的信息环境变量一般是全部大写单词和单词之间采用下划线分割。如0JAVA_HOME, CATALINA_HOME环境变量是在Shell会话外设置的可以由多个脚本和进程共享
常见的环境变量
变量名说明PATH指定系统查找可执行文件的路径如/usr/bin:/bin:/usr/local/binHOME当前用户的主目录路径如/rootUSER当前用户名如rootPWD 当前工作目录路径如/root/testSHELL当前用户使用的默认 Shell如/bin/bashLANG系统语言和字符编码信息如 en_US.UTF-8TERM当前终端的类型如xterm-256colorLOGNAME当前登录的用户名如root
3.1、查看环境变量 查看当前所有环境变量 printenv
# 或者
env查看或使用某个环境变量使用环境变量在变量名称前必须加上$符号 echo $PATH在脚本中直接访问环境变量 #!/bin/bash
echo 当前用户是$USER
echo 主目录是$HOME3.2、临时设置环境变量
临时设置的环境变量只在当前会话中有效会话结束后失效使用export设置环境变量
基本语法
export 变量名值示例
export MY_VARHello World
echo $MY_VAR环境变量中多个值使用:分隔符
export CLASSPATH/lib:/usr/lib:/home/user/myapp/lib# 通过 PATH 的已有值加上新路径
export PATH$PATH:/new/path3.3、永久设置环境变量
要使环境变量在每次系统启动后都生效需要将其添加到配置文件中 添加到用户配置文件 将环境变量添加到~/.bashrc或~/.bash_profile中针对 Bash Shellexport JAVA_HOME/usr/local/java/jdk1.8.0_371
export PATH$JAVA_HOME/bin:$PATH重新加载配置文件source ~/.bashrc添加到系统全局配置文件 将环境变量添加到/etc/profile中对所有用户生效export JAVA_HOME/usr/local/java/jdk1.8.0_371
export PATH$JAVA_HOME/bin:$PATH重新加载配置文件source /etc/profile4、特殊变量
特殊变量是在Shell中预定义的变量名称具有特殊的含义
常见特殊变量
$0: 当前脚本的文件名$1, $2...: 脚本参数列表中的第1个、第2个参数等等 如./first.sh abc def在执行这个脚本时第一个参数abc第二个参数def $#: 脚本参数的数量$*: 所有脚本参数的列表 将所有的参数作为一个字符串“a b c” $: 所有脚本参数的列表 将每一个参数作为一个独立的字符串“a” “b” “c” $$: 当前脚本的进程ID号$?: 上一个命令的退出状态一个数值 0表示成功其他值表示失败 $!后台运行的最后一个进程的进程ID 本地变量命名规则 创建脚本script.sh
#!/bin/bash# 脚本名
echo 脚本名称: $0# 参数个数
echo 参数总数: $## 打印所有参数
echo 所有参数 (\$): $
echo 所有参数 (\$*): $*# 第一个和第二个参数
echo 第一个参数: $1
echo 第二个参数: $2# 当前脚本的 PID
echo 当前脚本的 PID: $$# 执行一个后台命令
sleep 5
echo 最后一个后台进程的 PID: $!# 判断上一个命令是否执行成功
echo 上一个命令执行成功 (返回值: $?)# 执行一个错误命令测试返回值
ls /nonexistent/path /dev/null
echo 错误命令返回非零值 (返回值: $?)以./script.sh arg1 arg2 arg3运行脚本输出如下 5、控制语句
5.1、shell中的中括号
用于比较操作符用于比较两个值的大小或者判断两个值是否相等 -eq: 等于例如[ $a -eq $b ]-ne: 不等于例如[ $a -ne $b ]-lt: 小于例如[ $a -lt $b ]-gt: 大于例如[ $a -gt $b ]-le: 小于等于例如[ $a -le $b ]-ge: 大于等于例如[ $a -ge $b ] 用于测试表达式用于测试某个表达式是否成立 -f: 判断某个文件是否存在且是一个文件例如[ -f file.txt ]-d: 判断某个文件是否存在且是一个目录例如[ -d dir ]-z: 判断某个字符串是否为空例如[ -z “$str” ]-n: 判断某个字符串是否非空例如[ -n “$str” ]-e: 判断某个文件或目录是否存在例如[ -e file.txt ]测试表达式可以用中括号[]或者test命令实现例如:test -f file.txt等价于[ -f file.txt ] 要注意两个值之间必须有空格分隔否则会出现语法错误
5.2、if语句
基本语法
if condition
thencommand1command2...
elif condition2
thencommand3command4...
elsecommand5command6...
fi示例
#!/bin/bashif [ -f file.txt ]
thenecho file.txt文件存在
elif [ -d dir ]
thenecho dir目录存在
elseecho file.txt and dir都没找到
fi5.3、for循环
基本语法
for var in list
docommand1command2...
done其中var是一个临时的变量名用于存储当前循环的值list是一个值或者多个带有空格或换行符分隔的值组成的列表。
示例
#!/bin/bashfor i in 1 2 3 4 5
doecho The value of i is: $i
done5.4、while循环
基本语法
while condition
docommand1command2...
done在shell编程中$((...))被称为算术扩展运算符做数学运算的并且将运算结果返回。$(...)运算符会将结果直接返回
示例
#!/bin/bashj0
while [ $j -lt 5 ]
doecho The value of j is: $jj$((j1))
done5.5、until循环 until循环用于不断执行语句块直到满足指定条件为止。和while循环相反while是直到指定条件为假时才会停止循环。
基本语法
until condition
docommand1command2...
done示例
#!/bin/bashk0
until [ $k -ge 5 ]
doecho The value of k is: $kk$((k1))
done5.6、break和continue语句 break语句用于跳出当前循环块例如在for循环和while循环中使用该语句时可以跳出当前循环并停止迭代。 continue语句用于跳过本次循环迭代直接进入下一次的迭代。
示例
#!/bin/bashfor l in 1 2 3 4 5
doif [ $l -eq 3 ] thencontinuefiecho The value of l is: $lif [ $l -eq 4 ] thenbreakfi
done输出结果等于3跳过等于4跳出循环结束
1
26、函数 在Shell脚本中函数是一种封装代码的方式可以提高代码的重用性和可读性。
6.1、函数的定义和调用
基本语法
function_name() {# 函数体执行的命令或脚本
}或者
function function_name() {# 函数体执行的命令或脚本
}示例
say_hello() {echo Hello, World!
}# 调用函数
say_hello6.2、带参数的函数 函数可以通过位置参数$1, $2, …接收输入参数类似于脚本中的参数。
示例
greet() {echo Hello, $1! Welcome to $2.
}# 调用函数并传递参数
greet Alice Linux说明
$1 表示第一个参数$2 表示第二个参数以此类推参数之间用空格分隔
6.3、将函数定义在 Shell 配置文件中 如果希望在 任何地方都可以调用函数可以将函数定义放入Shell的配置文件中例如~/.bashrc或~/.zshrc。
方法
编辑 ~/.bashrc或 ~/.zshrc添加函数定义greet() {echo Hello, $1!
}保存文件后运行以下命令重新加载配置source ~/.bashrc 现在你可以在任何命令行终端调用该函数greet Alice7、重启springboot项目脚本
# 1. 定义服务端口
port1514# 2. 查找并杀掉正在运行的进程
pid$(lsof -t -i:$port)
if [ -n $pid ]; thenecho 杀掉$port端口进程kill -9 $pid
elseecho 没有端口为$port的进程
fi# 3. 启动新进程
cd /data/java
nohup java -jar my-springboot.jar /data/log/boot.log 21 echo $port端口的服务已重启四、Shell的执行方式 在Linux系统中运行Shell脚本如 .sh 文件有多种方式。以下是常见的几种执行方式及它们的区别。
1、使用指定Shell解释器
基本语法
sh script.sh或者
bash script.sh特点
使用指定的Shell解释器运行脚本如 sh 或 bash无需给脚本赋执行权限只要有读权限即可
2、使用chmod赋执行权限后运行
步骤
给脚本赋执行权限chmod x script.sh直接运行脚本./script.sh或者完整路径/path/to/script.sh特点
根据脚本开头#!/bin/bash解释器运行如果没有使用当前Shell默认解释器必须给脚本文件赋予执行权限
3、使用当前Shell解释器
语法
. script.sh或者
source script.sh特点
使用当前Shell默认的解释器脚本在当前Shell环境中运行不会启动新的子Shell脚本中的变量和修改会直接影响当前Shell环境无需给脚本赋执行权限只要有读权限即可
4、将脚本放入系统PATH 如果希望脚本在任何地方都可以运行可以将脚本文件放入$PATH中的目录如/usr/local/bin或~/bin
示例
将脚本移动到系统目录mv script.sh /usr/local/bin确保脚本可执行chmod x /usr/local/bin/script.sh直接调用脚本script.sh