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

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   或者  source filename.sh
#使用“ ./ ”  执行脚本需要增加X执行权限。

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

  • 输入重定向到Shell脚本
    Shell从指定文件中读入命令行,并进行相应处理
  bash < filename.sh 

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

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

-v选项:允许用户查看Shell程序的读入和执行,会打印出命令行的原始内容
x选项: 允许用户查看Shell程序的执行,会打印出经过替换后的命令行的内容

编写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 (储存数据)

  • 变量名的命名规则:

首个字符必须为字母(a-z,A-Z
中间不能有空格,可以使用下划线(_
不能使用标点符号
不能使用Shell中的关键字

  • 使用变量:

$变量名 (一个值)
变量名还可以加上花括号“{}

  • 查看变量:
echo $变量名 
#查看某个变量echo  $变量名  set  
#所有变量: 包含自定义变量和环境变量
  • 只读变量

使用readonly或者declare -r命令可以将变量定义为只读变量,只读变量的值不能被改变

readonly  $变量名= 变量值
declare -r  $变量名= 变量值
  • 取消变量:
unset  变量名 
  • 作用范围:仅对当前Shell脚本有效

举个例子:

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

结果:

I am lxj

环境变量

作为系统环境的一部分,不必去定义它们,可以在Shell程序中使用它们,某些变量(如PATH)可以在Shell中修改并将它看作全局变量。

  • 定义:
    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.mrgr.cn/news/81007.html

相关文章:

  • 防火墙技术与网络安全
  • [bug] StarRocks borker load意向之外的bug
  • C语言编程1.27汉诺塔
  • Sentry日志管理thinkphp8 tp8 sentry9 sentry8 php8.x配置步骤, tp8自定义异常处理类使用方法
  • 移动网络(2,3,4,5G)设备TCP通讯调试方法
  • C语言进阶(2) ---- 指针的进阶
  • Restaurants WebAPI(三)——Serilog/FluenValidation
  • Jenkins
  • lc148链表排序——链表版归并排序
  • AI的进阶之路:从机器学习到深度学习的演变(二)
  • 【老白学 Java】泛型应用 - 卡拉 OK(四)
  • git merge 冲突 解决 show case
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情
  • JS数组方法汇总
  • 【算法】编程拓展-C语言-期末复习
  • 代码随想录算法训练营第十一天-239.滑动窗口最大值
  • 基于pytorch的深度学习基础3——模型创建与nn.Module
  • 009 Qt_显示类控件_QLCDNumber、ProgressBar、Calendar
  • 深度学习Python基础(2)
  • 移植 OLLVM 到 LLVM18,修复控制流平坦化报错
  • EdgeX Core Service 核心服务之 Meta Data 元数据
  • 精通Redis(一)
  • SpringBoot Redis 消息队列
  • JWT,OAuth 2.0,Apigee的区别与关系
  • MySQL的详细使用教程
  • .NET重点