永远的 Hello world
1. 输出命令 echo
echo "Hello world"
和 echo 'Hello world!'
选项: -e
支持反斜线控制的字符转换
可以通过通配符 支持16进制ASCII字符
还可以输出颜色 echo -e "\e[1;31m abcd \e[0m"
ehco -e "\e[1;颜色命令 内容 \e[0m"
30m 黑色
31m 红色
32m 绿色
33m 黄色
写shell脚本的一个例子
#!/bin/sh
#Author: Gray
echo -e "\e[1;31m Nothing is more lamentable than a dead heart \e[0m"
注意第一步的注释,是有作用的,不仅是注释,而且会读取
这个真的是血泪史啊,我刚开始以为是 应该填绝对路径,以为是注释而已,原来它真的不是注释而已啊,应该不会有什么问题,后来发现原来真的必须写成#!/bin/sh
不然就会出现如下错误
-bash: ./h.sh: /home/sh: bad interpreter: No such file or directory
这个#!/bin/bash
表示我写的是一个shell脚本
2. 如何执行脚本
如果我把上面的脚本存为hello.sh,那么我如何执行这个脚本呢?
- 方法一 赋予执行权限,直接运行
chmod 755 hello.sh
这样所有的用户都可以执行
可以使用绝对路径的方式来执行 /home/ubuntu/Luxcom/hello.sh
的方式来执行
也可以用相对路径的方式来执行./hello.sh
** 一般情况下,Linux中所有的命令都必须使用绝对路径或者相对路径来执行**
-
方法二 通过Bash调用执行脚本
bash hello.sh
可以不用赋予权限
3. Windows和Linux的回车符的转换问题
通过 -A cat 文件名
可以查看文件隐藏起来的回车符
Windows中的回车符是M$
表示的,而Linux中的回车符是用$
表示的,所以Linux中不能执行使用Windows编写的脚本,该如何处理这个问题
可以使用dos2unix [Windows下的文件]
这条命令把windows下的文件的回车符转化为Linux下的回车符格式
这个命令需要安装
3. bash基本功能
3.1历史命令与命令补全
历史命令 history
history [选项] [历史命令保存文件]
选项: -c
清空历史命令
-w
把缓存中的历史命令写入历史命令保存文件
历史命令默认保存1000条,这个条数可以修改
一些快捷键:
使用上、下箭头调用以前的历史命令
使用!n
重复执行第n条历史命令
使用!!
重复执行上一条命令
使用!字符串
重复执行最后一条以该字符串开头的命令
命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按Tab
键会自动进行补全
如果使用第一次没有补全,再按一次,会把所有的可能情况全部显示出来
3.2 命令别名与常用快捷键
命令别名
alias 别名='原命令'
设定命令别名
alias
查询命令别名
命令执行顺序:
- 第一顺位执行用绝对路径或相对路径执行的命令
- 第二顺位执行别名
- 第三顺位执行Bash的内部命令
- 第四顺位执行按照
$PATH
环境变量定义的目录查找顺序找到的第一个命令
其实Linux中所有的命令都是需要使用绝对路径或者相对路径才能执行的,但是系统命令之所以能够不打绝对路径,是因为在Linux中有PATH环境变量,可以使用 echo $PATH 显示环境变量,Linux使用环境变量进行了简化操作
使用命令行设置的别名只能临时生效,重启之后会失效,如何才能使别名永久生效,需要写入配置文件.bashrc
快捷键
ctrl + A
强制终止当前命令
ctrl + L
清屏,相当于clear
ctrl + U
删除或者剪切光标左侧的内容
ctrl + Y
粘贴ctrl + U
或者ctrl + K
剪切的内容
ctrl + D
退出当前用户
3.3 输入输出重定向
略
3.4 多命令顺序执行与管道符
多命令执行符 | 格式 | 作用 |
---|---|---|
; |
命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& |
命令1&&命令2 | 逻辑与 当命令1正确执行,命令2才会执行 |
` | ` |
* 管道符
管道符是一个非常有用的命令
命令格式: 命令1 | 命令2
命令1的正确输出作为命令2的操作对象
可以和grep
这个命令一起使用,可以从输出内容中搜索自己想要寻找的具体的内容
- 介绍一下grep命令
grep [选项] "搜索内容" 文件名
可以搜索文件中的某些具体内容
-i
忽略大小写
-n
输出行号
-v
反向查找
--color=auto
搜索出的关键字用颜色显示
例子: grep "echo" hello.sh
通过使用grep命令在hello.sh文件中寻找echo
cat hello.sh | grep -n --color=auto "Gray"
通过使用grep命令在输出中寻找 Gray
3.5 通配符和其他特殊字符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个字符 |
[] | 匹配括号中任意一个字符,例如[abc]代表一定匹配一个字符 |
[-] | 匹配中括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9] 匹配不是一个数字的字符 |
Bash中的其他特殊字符
符号 | 作用 |
---|---|
单引号 '' | 会使特殊字符丧失作用 |
双引号 "" | 有些特殊符号仍然会又作用 |
反引号` ` | 反引号括起来的内容是系统命令,在bash中会优先执行 |
$() 和反引号``的作用一样,更推荐使用$() | |
# | 注释 |
$ | 用于调用变量的值,比如需要调用变量name的值时,需要用$name的方式得到变量的值 |
\ | 转义符 |
1. 基础正则表达式
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配
grep
awk
sed
等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配
ls
find
cp
这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
2. 字符截取命令
cut字段提取命令
printf命令
awk命令
sed命令
3. 字符处理命令
排序命令 sort
语法: sort [选项] 文件名
选项:
-f
忽略大小写
-n
以数值型进行排序,默认使用字符型排序
-r
反向排序
-t
指定分隔符,默认分隔符是制表符
-k n[,m]:
按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)
统计命令 wc
语法: wc [选项] 文件名
选项:
-l
只统计行数
-w
只统计单词数
-m
只统计字符数