目录
前言
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。
一、概述
(一)、shell脚本基础概念
脚本就是将手动一次性执行的命令进行规范且自动化
(二)、shell的类型
shell 命令解释环境
类型有
sh
ash
bsh
csh
bash
tcsh
dsh
zsh
在Linux系统中
文件名**.sh** .sh 是linux下bash shell 的默认后缀
查看系统中支持的shell
cat /etc/shells
查看系统默认shell
echo $SHELL

二、Shell变量
(一)、组成
1.变量名
不会变化
声明规范
不能是数字或数字开头
以_或字母开头
变量名中不能包含特殊字符

声明方法
驼峰式 userName
双驼峰 UserName
shell写法
user_name
username
USERNAME
2.变量值
不断变化
数字、字符
(二)、类型
1.系统内置变量(环境变量)
这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。
env可在/etc/profile文件中修改


查看环境变量
echo $PATH
显示当前环境变量的值
echo $LANG

表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码
查看当前的区域设置
locale


查看远程连接
echo $SSH_CONNECTION

2.自定义变量
这种变量是最常见的变量,由用户自由定义变量名和变量的值。
varName=varValue
等号两边不能有空格
字符串
shell中可以不使用引号
当包含有空格时,需要使用引号
引号的用法
|---------|--------|
| 不会引用变量值 | 单引号 ' |
| 会应用变量值 | 双引号 " |
| 引用命令结果 | 反撇号 ` |
| $(命令) | 应用场景较多 |
3.预定义变量
是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
|-------|------------------|
| 0 | 脚本本身的名称 |
| # | 脚本后参数的个数 |
| \* | 脚本运行时参数的内容(整体输出) |
| @ | 脚本运行时参数的内容(逐个输出) |
| $? | 脚本运行完毕后的返回值 |
| 默认情况大 | 0 成功 |
| | 非0 失败 |


一般情况下失败为1,特殊的失败
4.位置变量
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
脚本后参数所在的位置
$1
...
$9
5.作用域
输出 echo $varName
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量(export)
6.shell中的字符串
string
1)获得字符串的长度
语法: ${#StringName}

2)字符串取子串
语法: ${#StringName:position:lenght}
注意:lenght没有定义时,一直取到字符串的结尾!

3)字符串的截取
a.从左至右截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName##*string}
b.从左至右截取第一个匹配字符串string之后的所有字符串
语法: ${StringName#*string}
c.从右至左截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName%%string*}
d.从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}

4)字符串的拼接
语法: StringName3={StingName1}{StringName2}

5)字符串替换:
语法: ${StringName/OldString/NewString}

三、运算符
(一)、数学运算
|------------|---------------------|
| + - * / % | * 作为乘号时需要加转义符为\* |
| 运算方法 | |
| expr | expr a + b |
| ((a+b)) | echo ((a+b)) |
| \[a+b\] | echo [a+b] |
| 注意 | shell不支持浮点数的显示 |
|-----|-------|
| \r | 回车符 |
| \d | 垂直制表符 |
| \v | 水平制表符 |


(二)、比较运算
1.数值比较
|-----|------|
| -eq | 等于 |
| -ne | 不等于 |
| -lt | 小于 |
| -le | 小于等于 |
| -gt | 大于 |
| -ge | 大于等于 |
用test测试

2.文件比较
|----|-----------|
| -e | 文件或目录是否存在 |
| -f | 是否为文件 |
| -d | 是否为目录 |
| -r | 判断文件是否可读 |
| -w | 判断文件是否可写 |
| -x | 判断文件是否可执行 |


3.字符串比较
|------|--------|
| = | 字符串一致 |
| != | 字符串不一致 |
| -z | 字符串为空 |
| ! -z | 字符串不为空 |

4.逻辑运算符
|------|----|--------------|
| && | | 并且,有假则假,全真为真 |
| || | | 或者,有真则真,全假为假 |
| ! | 取反 | 有真则假,有假则真 |

5.条件测试
|------|------------------------------|--------------|
| && | [ a -ne b ] && echo OK | 条件 && 输出结果 |
| | | 条件为真输出 |
| || | [ a -ne b ] || echo OK | 条件 || 输出结果 |
| | | 条件为假输出 |
四、shell脚本
(一)、shell脚本编写规范
|-----|-------------|
| 第一行 | #!/bin/bash |
| 第二行 | #脚本的说明 |
| 第三行 | 脚本正文 |
(二)、shell运行规则
|-------|--------------------|
| 没有x权限 | bash 脚本所在路径/脚本文件 |
| | source 脚本所在路径/脚本文件 |
| | .(点)脚本所在路径/脚本文件 |
| 有x权限 | .(点)/脚本文件 |
| | 脚本绝对路径/脚本文件 |


不打断会一直查看
(三)、shell脚本运行追踪
shell脚本运行追踪bash -x 脚本所在路径/脚本文件
\[RANDOM%100]返回100内随机数
seq 1 10返回1到10 的连续数字
{1..10}返回1到10 的连续数字
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1


read -p "提示语" 变量名读取键盘输入并赋值给变量名



总结
今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!