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

Linux Shell 脚本编程基础知识篇

ℹ️大家好,我是练小杰,从本文是Linux shell脚本编程的基础知识内容,后续我会不断补充~~
更多Linux 相关内容请点击👉“Linux专栏”~

假面驾驭,时王,假面骑士时王~~
在这里插入图片描述

文章目录

  • 什么是 Linux Shell
    • 主要功能
    • 常见SHELL类型
    • Shell 的优势
  • 文件编译器
    • Vim
    • Nano
    • Emacs
    • Gedit
    • Kate
    • Sublime Text
    • Atom
    • Micro
    • Helix
    • Midnight Commander (mcedit)
  • 运行Shell脚本命令
    • 脚本需要有可执行权限,若没有X权限时,有以下两种办法
    • 编写Shell脚本并运行(新手)
    • 温馨提醒
  • Shell变量
    • shell变量类型
    • 自定义变量
      • 举个例子:
    • 环境变量
      • 相关配置文件
    • 位置变量
      • 实例:
    • 预定义变量
  • 变量的数值计算
      • 举例:
    • 逻辑运算符
    • **算数运算符**
    • 双小括号 `(( ))`
      • 实例:
    • Shell 中的 ‘ | ’ 符号

在这里插入图片描述

什么是 Linux Shell

Shell本身是一个用C语言编写的程序, 它是用户使用Linux的桥梁。Shell既是一种命令语言, 又是一种程序设计语言。
所有的Linux命令都是Shell脚本语言。
其中shell文件命名以.sh为后缀,例如:lxj.sh

⚠️Linux中的三大查询命令都能结合起来用,也就是awk、sed、grep 都能用管道“ | ”结合用

主要功能

  • 命令的解释:
    读取用户输入的命令,解释并执行这些命令
  • 脚本编写:
    允许用户编写脚本(批处理文件),自动化执行一系列命令。
  • 环境配置:
    管理用户的环境变量,如 PATH、HOME 等。
  • 输入输出重定向:
    将命令的输入和输出重定向到文件或其他设备。
  • 管道“|”:
    将一个命令的输出作为另一个命令的输入,实现命令的组合使用
  • 作业控制:
    管理后台和前台作业,允许用户暂停、恢复和终止作业。

常见SHELL类型

  • Bash (Bourne Again Shell):
    最常用的 Shell,广泛应用于大多数 Linux 发行版本。
  • Sh (Bourne Shell):
    由 Stephen Bourne 开发的原始 Shell,广泛用于 Unix 系统。
  • Csh (C Shell):
    语法类似于 C 语言,适合习惯于 C 语言的程序员。
  • Tcsh (TENEX C Shell):
    Csh 的增强版本,提供了命令行编辑和拼写检查等功能。
  • Ksh (Korn Shell):
    由 David Korn 开发,兼容于 Bourne Shell,并增加了许多新特性。
  • Zsh (Z Shell):
    现代的、功能丰富的 Shell,结合了 Bash、KshTcsh 的特性

Shell 的优势

  1. Shell 提供了与操作系统交互的便捷方式,适合日常的系统管理任务
  2. 通过编写 Shell 脚本,用户可以自动化执行重复性任务,提高效率
  3. 同时,Shell 也提供了变量、循环、条件判断等命令,使得脚本编写更加灵活

文件编译器

Linux Shell 中,有多种文本编辑器可供选择,涵盖了从命令行到图形界面的各种工具

Vim

  • 支持语法高亮、插件扩展、宏录制等功能,适合高级用户使用
  • 安装命令:sudo apt install vim
  • 使用vim编辑脚本

打开文件: vim 文件名
进入插入模式:按 i
退出插入模式:键盘按 Esc
保存并退出:输入 :wq 并按 Enter退出编辑

Nano

  • 基本的文本编辑功能,并且界面底部显示了常用的快捷键

  • 安装命令:sudo apt install nano

  • 使用nano编辑脚本

打开文件:nano 文件名
保存文件:按 Ctrl + O
退出编辑器:按 Ctrl + X

Emacs

  • 具有丰富的插件和自定义选项,适合需要高度定制化环境的用户
  • 安装命令:sudo apt install emacs
  • 使用方式:

打开文件:emacs 文件名
保存文件:按 Ctrl + X 然后按 Ctrl + S
退出编辑器:按 Ctrl + X 然后按 Ctrl + C

Gedit

  • GNOME 桌面环境的默认文本编辑器,提供图形用户界面,适合需要图形界面的用户
  • 安装命令: sudo apt install gedit
  • 使用方式:

打开文件:gedit 文件名
保存文件:点击“保存”按钮
退出编辑器:点击“关闭”按钮

Kate

  • KDE 桌面环境的文本编辑器,支持多文档编辑、语法高亮等功能,适合需要高级编辑功能的用户。
  • 安装命令:sudo apt install kate
  • 使用方式:

打开文件:kate 文件名
保存文件:点击“保存”按钮
退出编辑器:点击“关闭”按钮

Sublime Text

  • 跨平台文本编辑器,具有快速启动、强大的搜索和替换功能,适合需要高效编辑环境的用户。
  • 安装命令:sudo snap install sublime-text --classic
  • 使用方式:

打开文件:sublime-text 文件名
保存文件:按 Ctrl + S
退出编辑器:点击“关闭”按钮

Atom

  • 由 GitHub 开发的免费开源文本编辑器,支持多种编程语言和插件扩展

  • 具有高度可定制性,适合需要自定义编辑环境的用户。

  • 安装命令:sudo snap install atom --classic

  • 使用方式:

打开文件:atom 文件名
保存文件:按 Ctrl + S
退出编辑器:点击“关闭”按钮

Micro

  • 易于使用且高度可定制的文本编辑器,支持通用复制/粘贴/保存快捷键。
  • 安装命令:sudo apt install micro
  • 使用方式:

打开文件:micro 文件名
保存文件:按 Ctrl + S
退出编辑器:按 Ctrl + Q

Helix

  • 基于 Rust 的终端文本编辑器,快速且高效,使用 Tree-Sitter 进行语法高亮,适合需要现代编辑功能的用户。
  • 安装命令:
git clone https://github.com/helix-editor/helix
cd helix
cargo install --path helix-term
  • 使用方式:

打开文件:helix 文件名
保存文件:按 Ctrl + S
退出编辑器:按 Ctrl + Q

Midnight Commander (mcedit)

  • 一个命令行文件管理器,其内部文件编辑器 mcedit 也是一个功能强大的文本编辑器,适合需要文件管理和编辑功能的用户。
  • 安装命令:sudo apt install mc
  • 使用方式:

打开文件:mcedit 文件名
保存文件:按 F2
退出编辑器:按 F10

运行Shell脚本命令

一般形式:

./filename.sh 
#使用“ ./ ”  执行脚本需要增加X执行权限。

一般运行脚本之前都需要先给.sh脚本增加可执行(x)权限。

脚本需要有可执行权限,若没有X权限时,有以下两种办法

  • 给文件增加可执行权限
chmod  744  filename.sh 或者 chmod  a+x filename.sh
  • 强制执行脚本文件,则不需要在脚本文件开头加Bash 解释器 #!/bin/bash 或者 Shell解释器#!/bin/sh
sh filename.sh   或者  bash filename.sh

编写Shell脚本并运行(新手)

  • 利用vim编辑器
vim lxj.sh 
  • 编辑lxj.sh文件,保存并退出
#!/bin/bash 
echo "Wellcome to lxj"
  • 增加可执行权限并运行
chmod 744 lxj.sh
./lxj.sh

运行结果:

Wellcome to lxj

温馨提醒

  • source filenamesh filename./filename执行脚本的区别
  1. 当shell脚本具有可执行权限(X)时,用sh filename./filename执行脚本是没有区别的。./filename是因为当前目录没有在PATH中,所有“.”是用来表示当前目录的。

  2. sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。

  3. source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里。

Shell变量

shell变量类型

四类: 自定义变量、环境变量,位置变量和预定义变量

自定义变量

  • 定义:变量名=变量值 ,变量名必须以字母或下画线开头,区分大小写,如a=192.168.16.11 (储存数据)

  • 使用变量:

$变量名 (一个值)
  • 查看变量:
echo $变量名 
#查看某个变量

echo $变量名  set  
#所有变量: 包含自定义变量和环境变量
  • 取消变量:
unset  变量名 
  • 作用范围:仅对当前Shell脚本有效

举个例子:

#!/bin/bash
a=lxj  #等号左右不能有空格  
echo "I am $a"   

结果:

I am lxj

环境变量

  • 定义:
    export 命令声明 ,比如:
export HISTSIZE=100  
#暂时修改为查看最近100条的操作痕迹
  • 用法:
$变量名  或 ${变量名}
  • 查看环境变量:

查看某个环境变量,例如

echo $PATH

查看当前环境的所有环境变量

env   
  • 作用范围:对当前Shell 和子shell 都有效果

相关配置文件

全局文件: /etc/profile (所有用户都有效)

用户文件: /.bash_profile (对指定用户有效, 进入目录 /home 找到你的用户目录才能用)

永久性改变环境变量置目录:/etc/bashrc

⚠️修改变量后不会立刻生效,必须要刷新文件

source  /etc/profile #文件路径,立刻生效

位置变量

  • 作用:在命令行、函数或者脚本中传递参数,变量不用定义。

  • 命令详解:

$0 获取当前的Shell脚本的文件名
$1-$9 接收的第1~9个参数
${10} 从第10个参数开始,必须用大括号括起来

实例:

-运用vim编辑器

vim lxj.sh
  • 编写脚本
#!/bin/bash 
echo  $1 
echo  $2 
  • 运行脚本
 ./lxj.sh 1 2 

结果:

1
2

预定义变量

  • 命令定义解释:

$0 脚本名
$* 显示所有参数
$@ 显示所有参数
$# 当前参数的个数
$$ 当前进程PID号
$! 上一个后台进程的PID号
$? 上一个命令的返回值,返回0表示成功、返回非0数表示运行错误

变量的数值计算

  • 数值计算的优先级:
()>>算术运算符 > 关系运算符> 逻辑运算符>赋值运算符

举例:

#!/bin/bash
a=10
b=5

# 加法
sum=$((a + b))
echo "a + b = $sum"

# 减法
diff=$((a - b))
echo "a - b = $diff"

# 乘法
prod=$((a * b))
echo "a * b = $prod"

# 除法
quot=$((a / b))
echo "a / b = $quot"

# 取模
mod=$((a % b))
echo "a % b = $mod"

# 幂运算
power=$((a ** b))
echo "a ** b = $power"

结果:

a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0
a ** b = 100000

逻辑运算符

-f 判断文件是否存在 例如: if [ -f filename ]
-d 判断目录是否存在 例如: if [ -d dir ]
-a 与运算(and) 例如: 逻辑表达式 –a 逻辑表达式
-o 或运算(or) 例如: 逻辑表达式 –o 逻辑表达式
-z 空字符串

算数运算符

-eq #等于 应用于:整型比较 equal

-ne #不等于 应用于:整型比较 not equal

-gt #大于 应用于:整型比较 greate

-lt # 小于 应用于:整型比较 letter

-ge #大于或等于 应用于:整型比较 greate equal

-le #小于或等于 应用于:整型比较 letter equal

双小括号 (( ))

  • 作用:进行数值运算与数值进行比较

  • 语法要求:

((i=i+1)) 称为运算后赋值法,把 i+1的运算后结果赋值给变量i

#!/bin/bash 
i=1
echo $((i=i+1)) #输出结果为2
  • i=$((i+1))(( ))前加$符,表示将表达式运算后赋值给i
#!/bin/bash 
i=1
echo i=$((i+1)) #输出结果i=2
  • 加入逻辑运算((8>7&&5==5))
#!/bin/bash 
echo $((8>7 && 5==5))  #输出结果为1

⚠️注意:上面涉及的数字及变量必须为整数(整型),不能是小数(浮点数)或字符串。

实例:

[root@master home]# a=5
[root@master home]# b=10
[root@master home]# echo $((a>(b-1)&&2-b))  
0
[root@master home]# echo $(($a>($b-1)&&2-$b))
0

Shell 中的 ‘ | ’ 符号

利用管道二次筛选数据:

awk "{print }"  /etc/passwd 
#输出该目录文件的内容

awk "{print }"  /etc/passwd | grep lian
#上面内容基础下进行筛选有字符串lian的部分

想要了解更多内容点击👉“练小杰的CSDN”!!!
今天星期三,明天星期四,再坚持3天就是冬至了!!!
明天见,各位大佬!!😄


http://www.kler.cn/a/442070.html

相关文章:

  • 5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
  • Java 对象池管理的高性能工具库 Apache Commons Pool 2
  • OA-CNN:用于 3D 语义分割的全自适应稀疏 CNN
  • Flink开发中的优化方案
  • 深度学习:大模型Decoding+MindSpore NLP分布式推理详解
  • Redis可视化工具--RedisDesktopManager的安装
  • VUE的缓存问题
  • 搭建分布式Hive集群
  • 【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
  • WPF ControlTemplate 控件模板
  • vue3+fastAPI最简单例子
  • 小主机大用途:香橙派使用Docker轻松搭建Lsky Pro图床实操教程
  • vue 自定义组件image 和 input
  • AWTK-WEB 快速入门(1) - C 语言应用程序
  • 【动态规划】多歧路 , 今安在? - 路径问题
  • 监控视频汇聚融合云平台一站式解决视频资源管理痛点
  • 大数据治理:开启数据价值挖掘之旅
  • Node的学习以及学习通过Node书写接口并简单操作数据库
  • 后台管理系统权限功能菜单和按钮权限如何实现的
  • 【附件】Selenium chromedriver 驱动及浏览器下载
  • windows C#-命名实参和可选实参(上)
  • 【mysql】如何查看大表记录行数
  • P8795 [蓝桥杯 2022 国 A] 选素数
  • [java]网络编程
  • 使用vitejs搭配vue.js,快速构建简单的网站案例展示Demo
  • Java基础夯实——2.6 Java中锁