LinuxC高级day03(Shell脚本)

【1】Shell脚本

1》Shell脚本基础概念

1> 概念

Shell使用方式:手动在命令行下命令或用Shell脚本

Shell脚本本质:Shell命令的有序集合 扩展名最好以 .sh 结尾,见名知义 也可以没有

Shell既是应用程序,又是一种脚本语言

解释型语句:不需要编译,解释一句执行一句 Python、Shell脚本

编译型语句:需要编译器gcc、g++进行编译,比如C语言

2> Shell脚本的创建和执行

新建一个Shell脚本文件: touch xx.sh

在脚本文件里面第一行必须是 #!/bin/bash 意思是用**/bin/bash**来进行解释执行

执行方式:

1)先更改Shell脚本的执行权限 使其具有执行权限 chmod 权限 xx.sh

2)执行 :./xx.sh

2》变量

1> 用户自定义变量

变量一般用大写

赋值操作用 = ,但是 = 左右两边不能有空格

引用变量时要在变量前加 $

2> 位置变量

**0或 {0}**表示命令行的第一个参数,也就是脚本名的参数 ./xx.sh

**1、 2....**就是剩下的第二个、第三个命令行参数,以此类推

**$#**表示所有命令行参数的个数(除了第一个命令行参数)

**@ 或 ***表示所有命令行参数(除了第一个命令行参数)

3> 预定义变量

**$?**表示前一条命令的退出状态 0为真 非0为假

$$ 表示正在执行的进程的进程号

4> 环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置、系统文件夹位置

例:

HOME:/etc/password 文件中列出的用户主目录

PATH:Shell搜索路径,就是一系列目录,当执行命令时,Linux就在这些目录下查找

3》功能语句

1> 说明性语句

以#开头是注释语句,起解释说明的作用

2> 功能性语句
read

**功能:**从标准输入读入一行数据,并赋值给后面的变量

格式:read 变量1 变量2 变量3

把读入行中的第一个数据赋值给变量1,第二个数据赋值给变量2 以此类推,当只剩最后一个变量但还有很多数据时,会把剩余数据都赋值给最后一个变量

read -p "提示语句" 变量列表 :可以将提示语句输出,同时输入变量

expr

格式: expr 表达式

注意: 表达式符号之间必须用空格,元素要用**$**引用 可以直接输出结果,不过脚本里一般结合命令置换符把结果重新赋值给其他变量

算术运算符命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(\*)、整除(/)和取余数(%)等操作, 小括号前面也要加\。

test

**可测试对象:**字符串 整数 文件属性 每种测试对象都有若干测试操作符
字符串测试:

test s1 = s2 测试两个字符串的内容是否完全一样

test s1 != s2 测试两个字符串的内容是否有差异

test -z s1 测试 s1 字符串的长度是否为0

test -n s1 测试 s1 字符串的长度是否不为0


整数的测试:

test a -eq b 测试 a 与 b 是否相等 equal

test a -ne b 测试 a 与 b 是否不相等 not equal

test a -gt b 测试 a 是否大于 b greater than

test a -ge b 测试 a 是否大于等于 b greater equal

test a -lt b 测试a 是否小于b litter than

test a -le b 测试a 是否小于等于b litter equal


文件属性的测试:

test -d name 测试name 是否为一个目录

test -f name 测试name 是否为普通文件

test -e name 测试文件是否存在

3> 结构性语句
if语句

基本结构:

bash 复制代码
if 条件
  then
     命令表1
  else
     命令表2
fi

多路分支结构:

bash 复制代码
if 条件1 
   then 
     命令表1 
   elif 条件2 
     then 
       命令表2 
fi

嵌套结构:

bash 复制代码
 if 条件1 
   then 
     if 条件2 
    then 
       命令表1 
     fi 
else 
   命令表2 
fi

结合test判断

结合操作符\[\],但是\[\]前后都需要空格

case语句

格式:

bash 复制代码
case 变量 in 
模式1) 
   命令表1 
   ;; 
模式2) 
   命令表2 
   ;; 
*)
   命令表n 
   ;; 
esac
for循环语句

格式:

bash 复制代码
for 变量名 in 单词表 
do 
    命令表 
done

for语句的几种书写格式:

1)for i in 1 2 3 4 do....done : 变量i从单词表中取值


2)for i do...done: 变量i从命令行取值,可以省略in单词表


3)for i in {1..10} do...done: 变量i从1-10个数中取值


4)for ((i = 0; i < 10; i++)) do...done: 书写格式类似c语言

while循环语句

格式:

bash 复制代码
​​​​​​​ while 命令或表达式 
do 
    命令表
done
循环控制语句

**break n :**结束 第 n 层循环 (从内层循环开始算第 1 层循环)

continue n:结束第 n 层的本次循环,继续下一次循环

补充操作符

-o 或运算 例如 $a -lt 20 -o $b -gt 100 返回 true

-a 与运算 例如 $a -lt 20 -a $b -gt 100 返回 false

! 非运算 例如 ! false 返回 true

&& 逻辑与 例如 \[ $a -lt 100 \&\& $b -gt 100 ] 返回 false

|| 逻辑或 例如 \[ $a -lt 100 \|\| $b -gt 100 ] 返回 true

| 位或 例如 echo \[2\|2\] \&位与 例如 echo 2\&1

4》数组

数组的赋值
bash 复制代码
1. arr = (1 2 3 4 5)

2. arr = ($1 $2 $3....)

3. read a b c 
   arr = ($a $b $c)

4. read -a arr
数组的调用
bash 复制代码
${arr[i]}        #引用数组元素,数组元素下标从 0 开始到 n-1 结束
arr[i] = 10      #对数组元素重新赋值
${arr[@]}        #遍历数组
${#arr[@]}       #数组元素个数

5》函数

函数定义方式
bash 复制代码
函数名() 
{ 
命令表 
} 

function 函数名()
{ 
命令表
}
函数调用
bash 复制代码
函数名  参数列表

函数内 1 2 表示的时传递给函数的参数

相关推荐
x_x-F16 分钟前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
潘正翔10 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin11 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
renhongxia111 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
Dovis(誓平步青云)12 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
专注_每天进步一点点12 小时前
SLB(绑定弹性公网ip)-gateway-业务pod,gateway上出现reset by peer,业务pod上没有reset by peer
服务器·tcp/ip·gateway
Java小白笔记13 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
ACP广源盛1392462567313 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
qetfw14 小时前
CentOS 7 搭建 LDAP 目录服务
linux·运维·centos
ALINX技术博客15 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统进阶-PS DMA
linux·fpga开发