
Shell 做为Linux服务端的脚本,其可以实现强大的功能和充分利用机器完成更多的事情
什么是Shell ?
Q :为什么在打入ls后看到目录信息?
A :我们输入的其实是ASIIN码,大家都知道计算机是只理解2进制码的,所以只有通过一种转换让机器认识我们在说什么, 这个时候就需要通过Shell翻译了。
Shell就是我们的命令解释器,他负责接受我们的命令,解释后给Linux内核执行
什么是Shell脚本 ?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
简单来说,就与Windows的Bat批处理相似
Shell脚本运行方式 ?
Shell脚本有两种运行方式
- 通过赋予 x 可执行权限,直接运行
- 通过bash 命令,加上脚本地址运行
PS : shell 在windows 下编写的脚本存在编码问题,由于windows在换行时多加了\r,所以在linux中会导致出错 , 我们可以通过Linux软件来直接解决这个问题
dos2unix cwj95.sh 将dos下shell转为unix下的
Shell命令执行顺序
1、 第一顺位 : 用 绝对 或相对 路径 的命令
2、 第二顺位 : 执行别命
3、 第三顺位 : Bash的内部命令
4、 第四顺位 : $PATH 环境下的命令
Bash常用快捷键
快捷键 | 命令 |
---|---|
Ctrl + A/E | 光标移动到 开头/结尾 |
Ctrl + C | 强制终止当前命令 |
Ctrl + L | 清屏,相当于 clear 命令 |
Ctrl + U | 删除或剪切光标之前的命令 |
Ctrl + K | 删除或剪切光标之后的命令 |
Ctrl + Y | 粘贴剪切内容 |
Ctrl + R | 在历史命令中搜索 |
Ctrl + D | 退出当前终端 |
Ctrl + Z | 暂停,并放入后台 |
Ctrl + S | 暂停屏幕输出 |
Ctrl + Q | 恢复屏幕输出 |
Bash通配符 和 特殊字符
通配符
- * 0个或多个通配符
- ? 1个任意字符
- [abc] 中括号里的任何其中一个字符
- * [:space:] 表示一个空格
- [:punct:] 所有标点符号
- [:lower:] 所有小写字母
- [:upper:] 大写字母
- [:digit:] 数字
- [:alnum:] 所有大小写字母和数字
- man 7 glob 可以得到以上所有信息
- [a-z] a 到 z 的范围中的任意一个字符
特殊字符
- ‘ ’ 单引号,直接输出原义
- “ ” 双引号,翻译特殊转义字符
- ` ` 反引号,需要运行的系统命令,会先被执行
- $ ( ) 与上面功能一致,但是结构清晰,所以推荐使用
- # 井号,表示这是一行注释
- $ 美元符号, 在shell中可以引用变量
- \ 反斜线, 取消字符特定含义
Shell 脚本变量规则
- 由字母、数字和下划线组成
- 变量名不能以数字开头
- 变量的默认类型 是 字符串类型,要运算,必须先改变其类型
- 变量前后用等号连接, 如 : name=cwj95
- 变量值有空格时,用引号包含 , 如 : name=”Cwj 95″
- 使用时${name}或$name , 推荐都使用前一种
- 环境变量名建议大写,便于区分
Shell 脚本变量分类
- 用户定义变量 :用户定义的
- 环境变量 :环境相关变量
- 位置变量 : 主要是向脚本传递的变量,不能自定义, 作用固定
4. 预订义变量 : Bash中已定义好的变量,不能自定义,作用固定
1. 用户变量 :
name=cwj95 定义变量
set 查看所有变量
unset name 删除变量
2. 环境变量:
自定义:会在当前Shell和子Shell生效
写入配置文件:全部的Shell生效
bash 开启一个新的命令行
pstree 可以打印进程树
通过上面两个命令,我们就可以查看到我们的Shell其中的关系
export 变量名=变量值 , 申明自定义环境变量
env 查询环境变量
unset name 删除变量
环境变量配置文件:
该文件中主要是定义对系统的默认环境变量,比如 PATH、HISTSIZE\PS1等
source 配置文件 或 . 配置文件 : 重新加载配置文件
PS:一般需要重新登录才生效,输入命令可以直接重新加载
环境变量有以下5个文件,其中~是针对个别用户修改,(隐藏文件使用 . 开头)
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
我们可以看一下登录的时候配置文件执行流程 (网上找的图)

在Centos 7 中,已经不存在i18n这个文件了,查看lang.sh可以发现

**CentOS 7 中,需要通过这个文件 /etc/locale.conf 才能改变系统语言 **
3. 位置变量:
位置变量是由Shell脚本使用者传入的变量,这些变量可以在Shell脚本中直接使用的
位置符号 | 功能说明 |
---|---|
$n | 表示传入的变量,从0开始,0代表原命令,而后依次表示其参数 |
$# | 代表参数的个数 |
$* | 代表整合的参数部分,参数合成的字符串 |
$@ | 分块表示脚本参数的内容,for可以打印得到每一个 |
4. 预定义变量:
由系统保留和维护的一组特殊的变量,这些变量通常用于保存程序运行状态等
预定义变量 | 功能说明 |
---|---|
$? | 上个命令是否执行成功,成功就为0,不然就是非0 |
$$ | 当前进程号(PID) |
$! | 后台运行最后一个进程的进程号(PID) |
接受键盘输入
read [选项] [变量名]
选项
- -p 提示信息
- -t 等待秒数
- -n 只接收的字符数,当数量够后自动执行
- -s 隐藏输入数据,以免相关信息暴露
Shell 脚本进行数值运算
首页我们学习一下declare的用法
declare [+/-] [选项] 变量名
- – : 给变量设定类型属性
- + : 取消变量类型属性
- -i : 将变量声明为整型
- -x : 将变量声明为环境变量
- -p : 显示变量被声明的类型
有三种方式进行:
- vaule=$(( 11+22 )) 使用双小括号包裹,推荐
- declare -i value=11+22 声明类型为整形
- value=$(expr 11+22) expr数值运算工具
变量测试与赋值
变量置换方式 | 变量 Y 没有设置 | 变量 Y 为空值 | 变量 Y 的设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x=为空 | x=新值 | x=新值 |
x=${y:+新值} | x=为空 | x=为空 | x=新值 |
x=${y=新值} | x=新值=y | x=为空,y=新值 | x=$y,y值不变 |
x=${y:=新值} | x=新值=y | x=新值=y | x=$y,y值不变 |
x=${y?新值} | 新值输出到屏幕 | x=为空 | x=$y |
x=${y:?新值} | 新值输出到屏幕 | 新值输出到屏幕 | x=$y |
Linux 欢迎信息
登陆系统前显示的欢迎信息 :
/etc/issue
(本地终端登录时显示) ,/etc/issue.net
(远程登陆时显示 , 不支持转义字符)
远程是否显示 , 还要看/etc/ssh/sshd_config
的 Banner 字段
默认是none, 打开Banner /etc/issue.net
,然后重启
/etc/motd
( 终端登录后显示此文件 , 不管远程还是本地 )
我们可以发现,类似阿里云的镜像都使用此文件提示Welcome to Alibaba Cloud Elastic Compute Service !
阿里提示文本
特殊字符 | 涵义 |
---|---|
\d | 本地端时间的日期 |
\l | 显示第几个终端机的接口; |
\m | 显示硬件的等级(i386/i486/i586/i686….) |
\n | 显示主机的网络名称 |
\o | 显示 domain name |
\r | 操作系统的版本 (类似 uname-r) |
\t | 显示本地端时间的时间 |
\s | 操作系统的名称 |
\v | 操作系统的版本 |
发表评论
沙发空缺中,还不快抢~