From bd6eb65926ed2240c23f240ed035e0beb06c74c7 Mon Sep 17 00:00:00 2001 From: flykhan Date: Tue, 15 Aug 2023 09:19:49 +0800 Subject: [PATCH] shell readme --- README.md | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) diff --git a/README.md b/README.md index e69de29..29a816f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,181 @@ +## 一、shell + +### 1.1 shell 解释器 + +``` +/bin/bash [默认] +/bin/sh +``` + +### 1.2 shell 脚本调用 + +系统自动调用: + +``` +/etc/profile 系统环境变量, 每次系统启动时调用 +~/.bashrc 用户环境变量, 用户登录时调用 +``` + +用户调用: + +``` +1) chmod +x xxx.sh + ./xxx.sh +2) bash xxx.sh +3) . xxx.sh 相当于 source xxx.sh +``` + +### 1.3 shell 脚本的定义 + +第一行: + +``` +#!/bin/bash +``` + +### 1.4 shell 变量 + +``` +定义: 变量名=值 +引用: $变量名, "$变量名 xxx" +重新赋值: 变量名=新值 +算术计算: 变量名=$(( 变量名 算术运算符 值 )) + +预定变量: $#, $*, $?, $1~9, $0 进程名, $$ 进程ID +环境变量: $环境变量名 + export 变量名=值 设置环境变量 + +特殊的变量写法: (变量名=值; 其它语句) 不影响外部的同名变量 + {变量名=值; 其它语句;} 影响外部的同名变量 +``` + +### 1.5 条件测试语句 + +语法: + +``` +test 操作符 变量 +test 变量1 操作符 变量2 +[ 操作符 变量 ] +[ 变量1 操作符 变量2 ] +``` + +文件相关: + +``` +-e 是否存在 -d 是目录 -f 是文件 +-r 可读 -w 可写 -x 可执行 +-L 符号连接 -c 是否字符设备 -b 是否块设备 +-s 文件非空 +``` + +字符串相关: + +``` += 两个字符串相等 != 两个字符串不相等 +-z 空串 -n 非空串 +``` + +数字相关: + +``` +-eq 数值相等 -ne 数值不相等 +-gt 数 1 大于数 2 -ge 数 1 大于等于数 2 +-lt 数 1 小于数 2 -le 数 1 小于等于数 2 +``` + +复合测试相关: + +``` +command1 && command2 左边命令执行成功(即返回 0)shell 才执行右边的命令 +command1 || command2 左边的命令未执行成功(即返回非 0)shell 才执行右边的命令 +``` + +多重条件判定: + +``` +-a 多个条件必须都为真(true) 结果才为true +-o 多个条件中只需要一个为真,结果为true +! 条件取反 +``` + +### 1.6 分支语句 + +if 分支: + +``` +if [ 条件1 ]; then + 执行第一段程序 +elif [条件2 ]; then + 执行第二段程序 +else + 执行第三段程序 +fi +``` + +case 分支: + +``` +case $变量名称 in + “第一个变量内容”) + 程序段一 + ;; + “第二个变量内容”) + 程序段二 + ;; + *) + 其它程序段 + exit 1 +esac +``` + +for 语句: + +``` +for (( 初始值; 限制值; 执行步阶 )) +do + 程序段 +done +``` + +while 语句: + +``` +while [ condition ] +do + 程序段 +done +``` + +until 语句: + +``` +until [ condition ] +do + 程序段 +done +``` + +循环语句中可以使用 break 和 continue。 + +### 1.7 函数 + +定义函数: + +``` +函数名(){ + 命令 ... +} + +function 函数名(){ + 命令 ... +} +``` + +调用函数: + +``` +函数名 param1 param2…… +``` + +函数体内,可以使用$1,$2 ...$9 读取传递到函数的参数。