一、概述
1.1 Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统及程序,用户后可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
1.2 Shell的分类
Bourne Shell:从1979起Unix就开始使用
Bourne Shell,Bourne Shell的主文件名为sh。
C Shell:C Shell主要是在BSD版的Unix系统中使用,其语法和C语言相类似而得名。
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括csh、tcsh。
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。
1.3 Linux支持的Shell
查询 /etc/shells
二、脚本执行方式
2.1 echo输出命令
echo [选项] [输出内容]
选项:
-e:支持反斜杠控制的字符转换
#输出颜色
echo -e "\e[1;31m abcd \e[0m"
30m=黑色 31m=红色 32m=绿色 33m=黄色 34m=蓝色 35m=洋红 36m=青色 37m=白色
2.2执行脚本
更改权限
chmod 755 hello.sh
./hello.sh
三、Bash基本功能
3.1.历史命令与补全
3.1.1历史命令
history [选项] [历史命令保持文件]
选项
-c
清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改。
3.1.2历史命令的调用
使用上、下箭头调用以前的历史命令
使用“!n”命令重复执行第n条命令
使用“!!”重复执行上一条命令
使用“!字符”重复执行最后一条以该字符串开头的命令
3.1.3命令与文件补全(Tab键)
3.2命令别名与常用快捷键
3.2.1命令别名
alias 别名='原命令'
#设定命令别名
alias
#查询命令别名
命令执行时的顺序
1 第一顺序位执行用绝对路径或相对路径执行的命令
2 第二顺序位执行别名
3 第三顺序位执行Bash的内部命令
4 第四顺序位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
让别名永久生效
vi /root/.bashrc 写入
删除别名
unalias 别名
3.2.2 Bash中常用快捷键
3.3输入输出重定向
3.3.1标准输入输出
3.3.2输出重定向
3.3.3输入重定向
wc [选项] [文件名]
选项
-c
统计字节数
-w
统计单词数
-l
统计行数
3.3.4多命令顺序执行与管道符
3.3.4.1多命令顺序执行
dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项
if=输入文件
指定源文件或源设备
of=输出设备
指定目标文件或目标设备
bs=字节数
指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数
指定输入/输出多少个数据块
例子
date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
date意义:可以计算出时间
3.3.4.2管道符
命令格式
命令1 | 命令2
#命令1的正确输出作为命令2的操作选项
颜色显示
netstat an | grep "ESTABLISHED"
grep [选项] "搜索内容" 文件名
选项
-i
忽略大小写
-n
输出行号
-v
反向查找
--color=auto
搜素出的关键字用颜色显示
3.3.5通配符和其他特殊符号
3.3.5.1通配符
3.3.5.2 Bash中其他特殊符号
四、Bash变量
4.1用户自定义变量
4.1.1什么是变量
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。
4.1.2变量设置规则
变量名称可以由数字、字母和下划线组成,但不能以数字开头。如果变量名是2name,则是错误的
在Bash中,变量的默认类型都是字符串型,如果要进行数字运算,则必须指定变量类型为数值型。
变量用等号连接,等号两边不能够有空格。
变量的值如果有空格,需要用单引号或双引号包括。
在变量的值中,可以用“\”转义符。
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“${变量名}”或用${变量名}包含。
如果是把命令的结果作为变量值赋予变量,则需要使用反引号和$()包含命令。
环境变量名建议大写,便于区分。
4.1.3变量的分类
用户自定义变量
环境变量:这种变量中主要保存的是和系统操作环境相关的数据
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
4.1.4
变量定义 name="hello word"
变量叠加 aa=123
aa="$aa"456
aa=${aa}789
变量的调用 $name
查看变量 set
删除变量 unset
4.2环境变量
4.2.1环境变量是什么
用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。
4.2.2设置环境变量名
#申明变量
export 变量名=变量值
#查询变量
env
#删除变量
unset
4.3系统常见环境变量
PATH:系统查找命令的路径
echl $PATH
PATH="PATH":/root/sh
PATH变量叠加
PS1:定义系统提示符的变量
4.3.1位置参数变量
4.4预定义变量
4.4.1 预定义变量
4.4.2接收键盘输入
read [选项] 变量名
选项
-p “提示信息”:在等待read输入时,输出提示信息
-t
秒数 read命令会一直等待用户输入,使用此选项可以指定等待时间
-n
字符数 read命令只接收指定的字符数,就会执行
-s
隐藏输入的数据,适用于机密信息的输入
五、Bash运算符
5.1数值运算与运算符
5.1.1 declare申明变量类型
declare [+/-] [选项] 变量名
选项:
-
给变量设定属性类型
+
给变量取消属性类型
-i
将变量申明为整数型
-x
将变量申明为环境变量
-p
显示指定变量被申明的类型
5.1.2
expr或let数值运算工具
dd=$(expr $aa + $bb) dd的值是aa和bb的和。注意“+”号左右两侧必须有空格
5.1.3 “$((运算式))” 或 “$[运算式]”
5.1.4运算符
5.2变量测试与内容替换
六、环境变量配置文件
6.1环境变量配置文件简介
6.1.1简介
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PSI、HOSTNAME默认环境变量。
6.1.2 source 命令
source 配置文件
使配置文件生效
6.1.3配置文件的类型(CentOs6)
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
6.2环境变量配置文件作用
6.2.1 环境变量的优先级
6.2.2 /etc/profile 的作用
$USER
$LOGNAME
$PATH
$HOSTNAME
$HISTSIZE
$MAIL
umask
调用 /etc/profile.d/*.sh文件
~/.bash_profile作用
调用了 ~/.bashrc文件
在PATH变量后面加入了“:$HOME/bin”这个目录
注销时生效的环境变量配置文件
~/.bash_logout
~/.bash_history
本地终端欢迎信息: /etc/issue
远程终端登录信息: /etc/issue.net
转义符将在此文件下无效
是否显示此登录信息,有ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启ssh服务)。
登录后的登录信息 /etc/mod
不管是本地登录还是远程登录,都会显示此信息。