shell概述
定义:shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。shell还是一个功能强大的编程语言,易编写、易调试、灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令。
查看linux支持的shell /etc/shells
shell脚本的执行方式
- echo输出命令
语法:echo [选项] [输出内容]
选项:
-e 支持反斜线控制的字符转换、
例:
echo -e "ab\bc" 输出:ac 删除左侧字符
echo -e "\e[1;31m abcd \e[0m" 输出颜色
30m 黑色 31m 红色 32m 绿色 33m 黄色 34m 蓝色 35m 洋红 36m 青色 37m 白色
控制字符 | 作用 |
---|---|
\\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和-n选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ACCII码表输出字符,其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ACCII码表输出字符,其中hh是两位十六进制数 |
- 第一个脚本hello.sh
vi /var/sh/hello.sh
#!/bin/bash 该#号不代表注释,代表以下内容都为脚本
#The first program
#Author hello
echo -e "hello world"
- 脚本执行
赋予执行权限,直接运行
cd /var/sh/
chmod 755 hello.sh
./hello.sh 或者 /var/sh/hello.sh
通过bash调用执行脚本
bash hello.sh
cat -A 文件名 查看文件内的详细情况
dos2unix 文件名 dos格式转换为linux格式 dos2unix包不存在的话,centos系统可以通过yum -y install dos2unix安装,unix2dos相反含义
base的基本功能
1.历史命令与命令补全
- 历史命令
history [选项] [历史命令保存文件]
选项:
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件~/.base_history'
历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改
- 历史命令的调用
使用上、下箭头调用以前的历史命令
使用“!n”重复执行第n条历史记录
使用“!!”重复执行上一条命令
使用“!字符串”重复执行最后一条以该字符串开头的命令 - 命令与文件补全 tab键
2.命令别名与常用快捷键
- 命令别名
语法:
alias 别名='原命令' 设定命令别名 临时生效
alias 查询命令别名
- 命令执行时顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行base的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。 - 别名永久生效
vi /root/.bashrc 添加别名
- 删除别名
语法:unalias 别名
- bash常用快捷键
快捷键 | 作用 |
---|---|
ctrl+a | 把光标移到命令行开头。 |
ctrl+e | 把光标移动到命令行结尾 |
ctrl+c | 强制终止当前命令 |
ctrl+l | 清屏,相当于clear命令 |
ctrl+u | 删除或剪切光标之前的命令 |
ctrl+k | 删除或剪切光标之后的内容 |
ctrl+y | 粘贴ctrl+u或ctrl+k剪切的内容 |
ctrl+r | 在历史命令中搜索,按下ctrl+r之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索。 |
ctrl+d | 退出当前终端 |
ctrl+z | 暂停,并放入后台 |
ctrl+s | 暂停屏幕输出 |
ctrl+q | 恢复屏幕输出 |
3.输入输出重定向
- 标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
- 输出重定向
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 命令 >> 文件 |
以覆盖的方式,把命令的正确输出输出到指定的文件或设备中。 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。 |
标准错误输出重定向 | 错误命令 2> 文件 错误命令 2>> 文件 |
以覆盖的方式,把命令的正确输出输出到指定的文件或设备中。 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。 |
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 命令 >> 文件 2>&1 命令 &> 文件 命令 &>> 文件 命令 >> 文件1 2 >> 文件2 |
以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 |
- 输入重定向
语法:wc [选项] [文件名]
选项:
-c:统计字节数
-w:统计单词数
-l:统计行数
命令<文件 把文件作为命令的输入
4.多命令顺序执行与管道符
- 多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| 命令1 || 命令2 逻辑或。当命令1执行不正确,则命令2才会执行。当命令1正确执行,则命令2不会执行。
- dd命令 主要用来磁盘复制
语法:dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子:date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date 统计复制一块100MB的文件需要多长时间
- 管道符
命令格式:
命令1 | 命令2 命令1的正确输出作为命令2的操作对象
颜色显示
例:
ll -a /etc/ | more 用more的方式分屏展示/etc/下的文件
- grep 显示文件中的搜索项
语法:grep [选项] "搜索内容" 文件名
选项:
-i:忽略大小写
-n:输出行号
-v:反向查找
--color=auto 搜索出的关键字用颜色显示
5.通配符与其他特殊符号
- 通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符、例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。 |
[-] | 匹配中括号中任意一个字符。-代表一个范围。例如:[a-z]代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。 |
- bash中其他特殊符号
符号 | 作用 |
---|---|
'' | 单引号。在单引号中所有的特殊字符,如“$”和"~"(反引号)都没有特殊含义。 |
"" | 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“~”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义 |
~~ | 反引号。反引号括起来的内容是系统命令,在bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“crtl+4”符号,而不当做是变量引用。 |
base的变量
1.用户自定义变量
变量设置规则
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
2.在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
3.变量用等号连接值,等号左右两侧不能有空格
4.变量的值如果有空格,需要使用单引号或双引号包括。
5.在变量的值中,可以使用“\”转义符
6.如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“ctrl+4变量名”或用ctrl+4{变量名}包含。
7.如果是把命令的结果作为变量值赋予变量,则需要使用反引号或ctrl+4()包含命令
8.环境变量名建议大写,以便区分变量分类
1.用户自定义变量
2.环境变量:这种变量中主要保存的是和操作系统环境相关的数据。
3.位置参数变量:这种变量是用来像脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
4.预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。本地变量
变量定义: name="hello world"
变量叠加:
aa=123
aa="$aa"456
aa=${aa}789
变量调用:echo $name
变量查看:set 查看所有变量
变量删除:unset name
2.环境变量
定义
用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。设置环境变量
#申明变量
export 变量名=变量值
#查询变量
env
#删除变量
unset 变量名
- 系统常见环境变量
1.PATH:系统查找命名的路径
echo $PATH 可以查看
2.PATH="$PATH":/root/sh #PATH变量叠加
3.位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
$n使用例子:
脚本:
vi test.sh
#!/bin/bash
sum = $(($1 + $2))
echo $sum #打印变量sum的值
执行:./test.sh 1 2
输出:3
$*和$@的区别:
脚本:
vi test.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
for y in "$@"
do
echo $y
done
执行:./test.sh 1 2 3 4
输出:
1 2 3 4
1
2
3
4
4.预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
$$和$!的例子:
脚本:
#!/bin/bash
echo "$$"
#输出当前进程的PID。
#这个PID就是这个脚本执行时,生成的进程的PID。
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行
echo "$!"
- 接收键盘输入
语法:read [选项] [变量名]
选项:
-p "提示信息":在等待read输入时,输出提示信息
-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:read命令只接收指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
例:
#!/bin/bash
read -t 30 -p "please input your name:" name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo "$name"
read -s -t 30 -p "please enter your age:" age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e "\n"
echo "Age is $age "
read -n 1 -t 30 -p "please select your gender[M/F]:" gender
#使用“-n 1”选项只接收一个输入字符就会执行(都不要输入回车)
echo -e "\n"
echo "sex is $gender"
base的运算符
1.数字运算与运算符
- declare 声明变量类型
语法:declare [+/-] [选项] 变量名
选项:
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型
- 数值运算
方法1:
aa=11
bb=22
#给变量aa和bb赋值
declare -i cc=$aa+$bb
方法2:
aa=11
bb=22
#给变量aa和bb赋值
dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格
方法3:“$((运算式))” 或 “$[运算式]” 一般建议使用这种方法
aa=11
bb=22
ff=$(( $aa+$bb ))
gg=$[ $aa+$bb ]
环境变量配置文件
1.环境变量配置文件简介
- source命令 使文件直接生效
语法:source 配置文件 或 . 配置文件 注意.后面有空格。
- 环境变量配置文件简介
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1等默认环境变量。 - 配置文件
1./etc/profile
2./etc/profile.d/*.sh
3.~/.bash_profile
4.~/.bashrc
5./etc/bashrc
2.其他配置文件和登录信息
- 注销时生效的环境变量配置文件
~/.bash_logout
- 其他配置文件
~/.bash_history 历史命令保存文件