linuxshell基础知识

【linuxshell基础知识】古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述linuxshell基础知识相关的知识,希望能为你提供帮助。
一、shell简介
1. 什么是shell?

- shell就是一个解释器,当用户向linux内核发送命令的时候,先发送到shell,shell将命令转化成linux内核能识别的指令,然后发送给linux内核。

linuxshell基础知识

文章图片
- 用户可以用Shell来启动、挂起、停止或者编写一些程序 - Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。 - Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

二、shell基础
1. 查看支持的shell
``` cat /etc/shells ``` - shell有很多种,我们可以通过cat /etc/shells来查看有哪些shell - 一般我们使用/bin/bash这个shell

2.查看shell的帮助信息
命令 作用
man bash 查看bash的命令帮助
info bash 查看bash的文档
help 命令显示bash支持的命令
help cd 如果想看某个命令的帮助可以 help 命令
3. echo
- 输出命令 - -e支持转义字符 ``` echo hello //输出hello echo hello\\r\\n //输出hellorn echo "hello\\r\\n" //输出hello\\r\\n echo -e "hello\\r\\nworld" //输出: hello world```

控制字符 作用
\\n 换行符
\\r 回车键
\\t 制表符,也就是Tab键
\\v 垂直制表符
\\onnn 按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数
\\xhh 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数
符号 颜色
#30m 黑色
#31 红色
#32 绿色
#33 黄色
#34 蓝色
#35 洋红
#36 青涩
#37 白色
echo -e "12\\r\\n34\\t56\\v78" //以上输出: 12 3456 78echo -e "\\0141" //以上输出a,就是将8进制转换成十进制数,然后对照ASCII表输出字符echo -e "\\x61" //以上输出a,就是将十六进制转成十进制,然后对照ASCII表输出字符echo -e "\\e[1; 31m warning \\e[0m" //输出红色的warning,颜色需要对照上面的表格

- 特别注意:输出带颜色的内容,格式是: ``` echo -e "\\e[1; 颜色符号 内容 \\e[0m" ``` - 颜色符号对照上表,内容左右没有空格

4. 编写执行shell 4.1 编写shell脚本
- 一般编写shell脚本,在脚本最上面会声明#!/bin/bash,代表是shell脚本执行,并且是/bin/bash下的shell - 编写shell文件举例如下: ``` #!/bin/bash echo -e "\\e[1; 34m hello world \\e[0m" ``` - 编写好的shell脚本文件必须以.sh作为文件后缀

4.2 执行shell脚本
- 执行有两种方式: - 方式一:bash 文件 - 方式二:./文件 - 注意:方式二执行文件前,必须先让文件有权限,即: ``` chmod u+x ./文件 //其中chmod表示change mode//也可以使用 chmod 755 文件 ``` - 举例执行shell文件 ``` bash ./test.sh //或 chmod 755 ./test.sh ./test.sh ```

5. 别名
- 查看所有别名 ``` alias ``` - 查看指定别名 ``` alias ls ``` - 设置临时别名 ``` alias yuhua="cd /home/yuhua" ``` - 这样执行yuhua这个命令就相当于执行"cd /home/yuhua",不过这是临时的,重启机子后就没有了 - 设置永久别名(2步走,第一步写入,第二部使生效) - 需要写入环境变量配置文件,即~/.bashrc文件 ``` su //进入root用户 vi ~./bashrc //可以在里面添加别名 alias yuhua="su yuhua" ``` - 然后使修改后的文件生效,有两个命令均可使用 - 方法一:使用source ``` source ~/.bashrc ``` - 方法二:使用点. ``` . ~/.bashrc ``` - 删除临时别名 ``` unalias yuhua ``` - 永久删除别名 ``` 进入 ~/.bashrc 然后删除别名 然后source ~/.bashrc ``` - 当永久别名跟临时别名是同一个时,临时别名优先 - 举例: - 设置了永久别名alias yuhua="echo 1" - 也设置了临时别名alias yuhua="echo 2" - 当执行yuhua,会打印出2

6. 命令的生效顺序
- 找:绝对路径或者相对路径,找不到走下一步 - 找:别名,找不到走下一步 - 找:bash内部命令,找不到走下一步 - 找:按照$PATH环境变量定义的目录查找顺序找到的第一个命令 - 注意:查看环境变量定义的目录,使用命令 ``` echo $PATH //会得到的结果是:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/yuhua/bin //该结果代表环境变量定义的目录,有很多,以:分割 ```

7. 命令快捷键
命令 含义
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在的位置删除到行首
ctrl+z 把命令放入后台
fg 把任务带回前台
ctrl+r 在历史命令中搜索
- 注意:在这里,所谓的把任务放入后台与带回前台指的是: - 当我输入命令,输完,并不是马上就执行结束的,可能是等待的过程,也就是当前命令一直在进行中,那么这时候可以使用ctrl+z把命令带入后台执行,这样你就可以继续操作了;同样的,对弈在后台执行的命令,可以用fg把任务待会前台,这样你就不能继续操作了

8. 历史命令
- history [选项] [历史命令保存文件] - 选项 - -c 清空历史命令 - -w 把缓存中的历史命令写入历史命令保文件 ~/.bash_history - 默认保存1000条 /etc/profile HISSIZE=10000

9. 调用
- 使用上下箭头调用以前的历史命令 - 使用 !n 重复执行第n条历史命令 - 使用 !! 重复执行上一条命令 - 使用 !字符 重复执行最后一条以该字符串开头的命令 ``` history -c 1echo 1 2echo 2 3echo 3 !2 !! !echo ```

10. 输出重定向 10.1 标准输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stderr 2 标准错误输出
类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
标准输出重定向 命令 > > 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中
错误输出重定向 命令> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
错误输出重定向 命令> > 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中
正确输出和错误输出同时保存 命令> 文件 2> & 1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令> 文件 2> > & 1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令& > 文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令& > > 文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存 命令> > 文件1 2> 文件2 以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中
10.2 输入重定向
- wc命令的功能为统计指定文件中的行数、单词数、字节数(换行回车表示一个字节), 并将统计结果显示输出 - 命令 < 文件把文件做为命令的输入 - 命令 < < 标识符 标识符把标识符之间内容作为命令的输入

- wc < access.log [root@localhost ~]# wc < < ! > hello world > ! 12 12//这里的wc < < ! 这个!是一个定界符,也就是当你输入的时候,输入当!表示结束了 //特别注意:这里的!是任意取的,你可以写@,也可以写EOF,甚至可以写yuhua

11. 管道符号 11.1 多命令顺序执行
多命令执行符 格式 作用 案例
; 命令1; 命令2 多个命令执行,命令之间没有任何逻辑联系 echo 1; echo 2;
& & 命令1& & 命令2 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 echo 1& & echo 2;
\\\\ 命令1\\\\ 命令2 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 echo 1\\\\echo 2;
- date; ls; date; ls - ls & & echo yes || echo no

11.2 管道符
- 命令1的正确输出会作为命令2的操作对象 - 命令1|命令2 ``` ls /etc/ | more netstat -an | grep ESTABLISHED | wc -l ```

11.3 通配符
- 匹配文件名和目录

通配符 作用
? 匹配一个任意字符
* 匹配0个或任意字符,也就是可以匹配任意内容
[] 匹配中括号中任意一个字符
[-] 匹配中括号中任意一个字符,-代表范围
[^] 匹配不是中括号中的一个字符
11.4
符号 作用
‘’ 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义
“” 双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \\ 例外,拥有调用变量值,引用命令和转义的含义
` 反引号,扩起来的是系统命令
$() 和反引号一样
# 在shell脚本中,#开头的行代表注释
$ 用于调用变量的值
\\ 转义符号
- 这里的单引号和双引号类似php - 单引号里如果有变量,不解析 - 双引号里如果有变量,会解析 - 举例: ``` name=yuhua myname=\'$name_10\' echo myname //得到的是$name_10字符串 myname2="$name-10" echo myname2 //得到的是yuhua-10 ``` - 这里的反引号代表执行的意思($()与反引号效果一模一样) - 举例: ``` files="`ls`" echo $files //会先得到ls,发现ls是带反引号的,则执行这个ls,得到的就是执行命令ls的结果 ```

-a=`ls` -b=$(ls)


    推荐阅读