概述:命令行解释器,翻译程序指令给内核请求调用硬件功能。
通俗来说是:内核和用户之间的命令解释器,至关于一个翻译官。linux
计算机识别:二进制(依赖ASCII
码表翻译)
为用户提供了一个 -》Linux
内核(发送请求)-》运行程序
实质:界面系统级程序
用途:启动、挂起、中止、编写程序
编程语言:解释执行的脚本语言,可直接调用Linux
系统命令
Shell:Linux
中的字符界面(接受命令、将命令转换成二进制)Windows
:有shell
吗?操做界面能够称为shell
。shell
1.Bourne Shell:从1979起Unix就开始使用bourne shell,bourne shell的主文件名为sh。 2.C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相相似而得名。 3.shell的两种主要语法类型有bourne和C,这二者语法彼此不兼容。
echo $SHELL
查看Shell
Bash:Bash
与sh
兼容,如今使用的Linux
就是使用Bash
做为用户的基本Shell
。编程
Linux
支持的shell 目录vi /etc/shells
。缓存
帮助管理员简化管理linux系统的一种脚本语言,简化管理操做
。没有像Java、PHP等语言复杂的功能。bash
格式:
echo
[选项] [输出内容]
选项: -e
:支持反斜线控制的字符转换服务器
\a - 输出警告音 \b - 退格符 \n - 换行符 \r - 回车键 \t - 制表符,也就是tab键 \v - 垂直制表符 \0nnn - 按照八进制ASCII码输出字符 \xhh - 按照十六进制ASCII表输出字符
echo "bols he cangls ni xihuan nayige"
echo -e "bols he cangls nib xihuan nayige"
echo -e "hellbo"
echo -e "htetlnltot"
echo -e "x68tx65tx6cnx6ctx6f"
echo -e "e[1;31mShell基础e[0m"编程语言
输出颜色:spa
\e[1;xxm
- 开启颜色显示;\e[0m
- 关闭颜色显示
30m
=黑色,31m
=红色,32m
=绿色,33m
=黄色34m
=蓝色,35m
=洋红,36m
=青色,37m
=白色命令行
方法1:赋予执行权限,直接运行翻译
chmod 755 hello.sh
./hello.sh
(或者绝对路径执行 /root/hello.sh
)
方法2:经过Bash
调用执行脚本
bash hello.sh
注解:#
第一行:#!/bin/Bash
不是注释,它标称下面的内容是Linux
的标准脚本程序
若是该脚本使用纯shell语句完成,不加#!/bin/Bash
,运行没问题
但,脚本调用了其余语言,就会报错。
alias
:查看系统中全部的命令别名
alias ls = 'ls --color=never'
设定别名(临时生效,重启或重登陆后失效)
alias 别名=‘原命令’(临时的)
永久生效vi ~/.bashrc
(不止一个环境变量文件) --写入环境变量配置文件(~
表明用户家目录)vi /root/.bashrc
--增长alias ls = 'ls --color=never'
(系统再次重启后永久生效)source .bashrc
--使当前环境变量设置生效(不须要系统再次重启后永久生效)
删除别名:unalias ls
命令生效顺序
第一顺位执行绝对路径或者相对路径的命令
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量设置定义的目录顺序的第一个命令
ctrl + c 强制终止 ctrl + l 清屏至关于clear ctrl + a 光标快速回到行首 ctrl + e 光标快速去到行尾 ctrl + u 从光标所在位置删除到行首 ctrl + z 把命令放入后台--这个命令很谨慎使用 ctrl + r 历史命令搜索
历史命令指的是把操做过的命令保留在系统当中, 当须要的时候能够从新进行调用。
cat ~./history
, 该文件下记录的命令是上次登陆, 正确注销以后保存的。history
命令查看, 不止有以前保存下来的, 还有本次登陆后新操做的命令, 这些命令只有本次正确退出以后才会写入 ~./bash_history
。
history [选项] [历史命令保存文件]
选项:
-c : 清空历史命令 # 不建议清空缘由1 : 当本次操做出现错误可用过历史命令进行比对排错 # 不建议清空缘由2 : 当登陆后发现历史命令被清空, 则可判断出有人登陆过该帐户或服务器 # 不建议清空缘由3 : 即便命令保存数目众多, 文件大小也不大, 不会给服务器形成多大压力 -w : 把缓存中的历史命令强制写入历史命令保存文件 ~/.bash_history
历史命令默认保存1000条, 能够再环境变量配置文件 /etc/profile
中进行修改 (HISTSIZE
)
历史命令的调用:
使用上、下箭头调用之前的历史命令 使用 "!n" 重复执行一次第 n 条历史命令 使用 "!!" 重复执行一次上一条命令 使用 "!字串" 重复执行一次最后一条以该字串开头的命令
如执行service network restart
后再输入!ser
,就是执行一样命令。
命令与文本补全
Bash
中, 命令
,目录
与文件补全是很是方便与经常使用的功能, 咱们只要在输入命令或文件时, 按"Tab
"键就会自动进行补全。关于2>&1的含义
将标准错误输出重定向到标准输出
>&
是一个总体,不可分开,分开后就不是上述含义了。 好比有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么”将标准错误输出重定向到标准输出”是否是就应该写成”2>1”就好了?是这样吗? 若是是尝试过,你就知道2>1的写法实际上是将标准错误输出重定向到名为”1”的文件里去了Q&A : 每次都写”>log 2>&1”太麻烦,能简写吗?
有如下两种简写方式
1. &>log 2. >&log
上面两种方式都和”>log 2>&1”一个语义。
那么 上面两种方式中&>和>&有区别吗?
语义上是没有任何区别的,可是第一中方式是最佳选择,通常使用第一种
命令 &> /dev/null
将命令的结果丢入null
(做用相似于垃圾箱)中 只执行,不显示.
wc [选项] [文件名]
选项:
-c:统计字节数 -w:统计单词数 -l:统计行数
wc <
文件名 用文件的内容做为输入 wc <<
标识符
...标识符
把标识符之间内容做为命令的输入
脚本中的应用:
命令 && echo yes || echo no
命令正确yes
错误no
注意: && echo yes || echo no
顺序不能颠倒,否则命令出错的时候会同时输出no yes
。
分页显示文件内容:
more [文件名]
管道符:
命令1 | 命令2
命令1正确的结果
做为命令2的操做对象。
例如
ls -l > /etc/ | more 用于分页显示命令执行结果 netstat -an | grep ESTABLISHED | wc -l 用于查看当前链接本机的客户端,并统计客户端数量
1.? 匹配任意一个字符 2.* 匹配0个或任意多个字符 3.[] 匹配括号中任意一个字符 4.[-]匹配括号中任意一个字符,-表明一个范围 5.[^]匹配不是括号中任意一个字符
如:ls test*
Bash中其余特殊符号:
'' 单引号,在单引号中左右的特殊符号,如$,&都没有特殊含义 "" 双引号,在双引号中左右的特殊符号都没有特殊含义,可是“$”,"`","\"是例外。拥有“调用变量的值”,“引用命令”和“转义符”的特殊含义 `` 反引号,反引号括起来的内容是系统命令,在Bash中会先执行它。和$()做用同样。 $() 用来引用系统命令 # 在Shell脚本中,#开头的行表明注释 $ 用于调用变量的值,如须要调用变量name的值时,须要用$name的方式获得变量的值 \ 转义符,跟在\以后的特殊符号将失去特殊含义,变为普通字符。如\$将输出"$"符号