Linux 之 shell 编程学习笔记(并不完全正确,有误请指正)

概念性知识点

脚本概念

脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的 可执行文件

运行脚本要求

脚本须有 可执行 权限,即 x 权限

内容格式:以#!/bin/bash开头

脚本的执行方式

法一(需可执行权限)

赋予脚本可执行权限:chmod u+x [脚本]

有可执行权限 的前提下,使用./[脚本] 或 直接输入脚本的绝对路径 [绝对路径] 即可运行脚本

法二(无需可执行权限)

直接使用sh [脚本]命令运行脚本

shell 编程知识点

shell 的变量

Linux shell 的变量分为 系统变量用户变量

常见系统变量:\$HOME 、\$PWD 、\$PATH 、\$USER 、$SHELL 等

常用命令

set 查看当前shell中所有变量
unset [变量] 撤销变量
echo $[变量] 查询变量的值

基本规则

与其他语言规则大同小异

注意:等号两侧 不能有空格

变量名一般习惯为大写(约定俗成)

基本语法

1. 定义变量:[变量名]=[值](中间不能有空格)

2. 撤销变量:unset [变量]

3. 定义静态变量:readonly [变量名]=[值] (静态变量不能被撤销,即不能被 unset )

4. 将命令的结果赋给变量:[变量名]=`[命令]`[变量名]=$([命令]) (第一种写法中 ` 号为 tab 键上面的键

5. 输出变量时带上 $ 符号,即 echo $[变量]

位置参数变量

image

例如:

image

传参,输出:

image

预定义变量

image

例如:

image

注意:第二行 & 符号表示 以后台方式运行

输出:

image

shell 的多行注释

格式

:<<![内容]!

shell 的运算符

shell 运算的三种方法

法一(不好用)

[变量]=$(([表达式]))

image

法二(好用)

[变量]=$[[表达式]]

image

法三(难用)

[变量]=`expr[简单表达式]`

!!!注意:` 号为反引号

数字与符号 间有空格

* 号前必须带转义字符 \

image

shell 的条件判断

判断语句

[ condition ] // 非空 返回 true ,空 返回 false

可用echo $?查询上一条判断是否执行成功( 0 为 true ,>1 为 false )

注意:condition 前后有 空格

三元运算符

[ condition ] && [语句1] || [语句2]

若 condition 满足,则执行语句1

两个整数之间比较

= 字符串比较

-lt 小于(less than)

-le 小于等于(less equal)

-eq 等于(equal)

-gt 大于(greater than)

-ge 大于等于(greater equal)

-ne 不等于(Not equal)

按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence)

-d 文件存在并是一个目录(directory)

shell 的流程控制

if条件判断

!!!注意:condition 前后必须有 空格,即使没有 condition 也要有空格

基本语法
单分支
#单分支

if [ condition ]

then

        [符合该条件执行的语句]

fi

例如:

image

多分支
#多分支

if [ condition ]

then

        [符合该条件执行的语句]

elif [ condition ]

then

        [符合该条件执行的语句]

else

        [符合该条件执行的语句]

fi

例如:

image

case选择语句

基本语法
case $1 in

"[条件]")

        [符合该条件执行的语句]

;; 				// ;; 符号代表 结束

"[条件]")

        [符合该条件执行的语句]

*) 				//如果没有符合上面条件的值,则执行这段代码

        [符合该条件执行的语句]

esac

例如:

image

输出:

image

for 循环

基本语法1
for [变量] in [值]

do

	[代码块]

done

例如:

image

基本语法2
for (([初始值];[循环控制条件];[变量的变化]))

do

	[代码块]

done

例如:

image

while 循环

基本语法
while [ 条件 ] //注意 条件 前后有空格

do

	[代码块]

done

例如:

image

read 读取控制台的输入

基本语法
read -p "[提示语]" 指定输入时的提示语
read -t [秒] 指定输入的等待时间

例如:

image

shell 的函数

系统函数

basename 基本语法
basename [文件路径] 获取文件名
basename [文件路径] [后缀] 获取文件名(不带后缀)

例如:

image

dirname 基本语法
dirname [文件绝对路径] 获取文件的路径

例如:

image

自定义函数

基本语法
function [函数名]{

	[代码块]

}

例如:

image

函数调用
[函数名] [参数]

例如:

image