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 表示的时传递给函数的参数

相关推荐
EricWang135810 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
算法与编程之美37 分钟前
文件的写入与读取
linux·运维·服务器
xianwu5431 小时前
反向代理模块
linux·开发语言·网络·git
Amelio_Ming1 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
Ven%2 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
JaneJiazhao2 小时前
HTTPSOK:SSL/TLS证书自动续期工具
服务器·网络协议·ssl
萨格拉斯救世主3 小时前
戴尔R930服务器增加 Intel X710-DA2双万兆光口含模块
运维·服务器
无所谓จุ๊บ3 小时前
树莓派开发相关知识十 -小试服务器
服务器·网络·树莓派
Jtti3 小时前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
TeYiToKu3 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm