一、Shell概述 计算机只认识01代码,而通常键入的是ASCII字符
1、Shell 贝克,桥牌
Shell是一个命令行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂载、停止甚至编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。
Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
接受命令,翻译成01代码 Windows的操作界面也可以称做Shell
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。
调用系统变量名:echo $SHELL 运行结果:/bin/bash
查看Linux兼容哪些shell:运行 vi /etc/shells 进入之后按exit退回上级shell
运行结果:/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
这里有父shell和子shell的概念。。。。孙子辈的 曾孙子辈的都可以调用。。。。。。。
二、脚本执行方式
1、echo 输出命令 输出的内容之间有空格的时候需要加双引号。。。。,但是6.6版本不加双引号也可以输出。
echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换
转义字符表:
eg: echo -e "h\te\\tl\nl\to\t" == echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t"
echo -e "\e[1;31m 嫁人就要嫁watt \e[0m" #开启颜色和终止颜色
#输出颜色 30m=黑色 ,31m=红色 , 32m=绿色,33m=黄色
34m= 蓝色 ,35m=洋红, 36m=青色,37m=白色
2、第一个脚本:
vi hello.sh
#!/bin/bash
#The first program
echo -e "\e[1;34m 天上掉下个超AI \e[0m"
3、脚本执行
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
通过bash调用执行脚本
bash hello.sh
三、Bash的基本功能
1.命令别名与快捷键
查看与设定别名
alias #查看系统中所有命令的别名
alias 别名 = '原命令' #设定命令别名
别名永久生效与删除别名 vi ~/.bashrc #写入环境变量配置文件
eg:
alias vi = ' vim' 用命令是临时生效, vi ./bashrc 加入文件内部是永久生效,but 需要restart. using source .bashrc 会调用一边文件使其直接生效。
unalias 别名 #删除别名
命令生效顺序
第一位执行用绝对路径或相对路径执行的命令
第二位执行别名
第三位执行Bash的内部命令
第四位执行按照$PATH环境 变量定义的目录查找顺序找到的第一个命令。
echo $PATH 用:分割的一系列系统命令
clear 清屏命令
常用的快捷键
Ctrl+c 强制终止当前命令
Ctrl+l 清屏
Ctrl+a 光标移动到命令行首
Ctrl+e 光标移动到命令行尾
Ctrl+u 从光标所在位置删除到行首
Ctrl+z 把命令放入后台
Ctrl+r 在历史命令中搜索
2.历史命令
histroy [选项] [历史命令保存文件]
选项: -c:清空历史命令 重要的帮助功能
-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history
vi /etc/profile 一个重要的环境配置文件,常见的环境变量配置文件有4个
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
历史命令的调用
使用上/下箭头调用以前的历史命令
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字符串”重复执行最后一条以该字串开头的命令
service network restart 重启网络服务 eg: !ser
tab键 命令补全/文件和文件名自动补全 按一下补全,按两下展开所有相关
可以快速加快我们的输入速度
帮助你排错
3.输出重定向
输入重定向
标准的输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stderr 2 标准错误输出
输出重定向
类型 符号 作用
标准输出重定向 命令>文件 以覆盖的方式,把命令的正确输出输出到指定的文件或者设备中
命令>>文件 以追击的方式,吧命令的正确输出输出到指定的文件或者设备中 eg: ifconfig > test.log cat test.log 将ip信息重定向到测试文本 并显示文件
标准错误输出重定向
错误命令 2>文件 中间没有空格 以覆盖的方式,把错误的命令输出输出到指定的文件或者设备中
错误命令 2>>文件 中间没有空格 以追加的方式,把命令的错误输出输出到指定的文件或者设备中
正确输出和错误输出同时保存
命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存同一个文件当中
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中。
ls &>/dev/null 相当于linux程序中的黑洞,将过程扔进黑洞。。。。。
输入重定向
[root@locahost ~]# wc [选项][文件名] 只有中间有空格 就当作单独的单词来处理
选项: 需要用Ctrl+d 来结束 进行统计
-c 统计字节数
-w 统计单词数
-l 统计行数
命令<文件 把文件作为命令的输入
命令<标识符 标识符把标识符之间的内容作为命令的输入
4.多命令顺序执行
管道符
多命令顺序执行符 格式 作用
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑关系
date ; tar -zcvf etc.tar.qz /etc ; date 但是不管中间命令是否报错。。。
&& 命令1&&命令2 逻辑与
当命令1正确执行,命令3才会执行
当命令1执行不正确,则命令2不会执行
|| 命令1||命令2 逻辑或
当命令1执行不正确时,则命令2才会执行
当命令1执行正确时,则命令2不会执行
检查命令是否能够正确执行 例如: ls && echo yes || echo no
more 用来查看文件的内容,分屏显示
管道符: | 有数据传递,命令2一定要能操作命令1的输出
[root@localhost ~]# 命令1 | 命令2 #把命令1的正确输出作为命令2的操作对象
ls -l /etc | more 用more来产看ls的结果
netstat -an 查看系统中的所有网络连接。。。。网络端口和网络程序。。。
netstat -an | grep ESTABLISHED 在这个命令后查询包含该字符串的命令
netstat -an | grep ESTABlLISHED | wc -l 可以查看几个人远程登录
5 通配符
通配符 作用
? 匹配一個字符
* 匹配0個或者任意多個字符,也就是可以匹配任何內容
[] 匹配中括號中的任意一個字符。例如[abc]代表一定匹配一個字符,或者是a,或者是b,或者是c。
[-] 匹配中括號中任意一個字符,-代表一個範圍,例如[a-z]代表匹配一个小写字母。
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如[^0-9]代表匹配一个不是数字的字符。
通配符一般用来匹配文件或者目录。
正则表达式 用来匹配文件中的数据
5.Bash中特殊符号
' ' 单引号 。在单引号中所有的特殊符号,如'$' ' ' ' (反双引号)都没有特殊含义
“” 双引号 。在双引号中特殊符号都没有特殊含义,但是“$”、“'” "\"是例外,拥有“调用变量的值”、“引用命令”“转义符”的特殊含义。
`` 反双引号。反双引号括起来的是系统命令,在Bash中会率先执行他,和$()作用一样,不过推荐使用$(),因为反括号非常容易看错
$() 和反括号一样,用来引用系统命令
# 在Shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需要调用变量name时,需要用$name的方式得到变量的值
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变成普通符。如\$将输出“$”符号,而不是当作变量引用。