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

相关推荐
CoolTiger、18 分钟前
【Vmware16安装教程】
linux·虚拟机·vmware16
学习3人组1 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神2 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0662 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen012 小时前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦2 小时前
linux 解压缩
linux·运维·服务器
牧小七3 小时前
Linux命令---查看端口是否被占用
linux
鸡鸭扣4 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马5 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
重生之我在20年代敲代码5 小时前
HTML讲解(一)body部分
服务器·前端·html