初识Shell①

107 阅读3分钟
一、文件描述符与输出重定向
在Shell程式中,最常用的FD(file descriptor) 大概有三个,分别是:
0: Standard Input (STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output (STDERR)
在标准情况下, 这些FD分别跟如下设备关联:
stdin(0): keyboard 键盘输入,并返回在前端
stdout(1): monitor 正确返回值 输出到前端
stderr(2): monitor 错误返回值 输出到前端
一般来说, "1>" 通常可以省略成 ">".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道,之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件,如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道. nginx -V
例子. 当前目录下只有a.txt,没有b.txt
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端 =================================
[root@localhost dir1]# cat >>  b.txt <<EFO
> eee
> 曲项向天歌
> 白毛浮绿水
> 红掌拨清波
> EFO
[root@localhost dir1]# cat b.txt
eee
曲项向天歌
白毛浮绿水
红掌拨清波
二、Linux操作快捷方式
补全
Tab键 
安装bash-completion  #增加补全

历史 
history 所有历史
!编号    ↑	Ctrl+R    esc . 上一条命令的最后一个参数
小技巧:显示历史命令执行时间
	1.设置变量
	   vim /etc/profile
       HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S" 
	2.再次执行history查看结果
       source etc/profile
别名 
#临时设置
alias xxx=''  
#永久生效
vim /root/.bashrc   
alias xxx='' 
unalias xxx

快捷键
Ctrl+a #光标移动至行首
Ctrl+e #光标移动至行尾
Ctrl+u #剪切光标至行首的内容
Ctrl+k #剪切光标至行尾的内容

前后台作业
1、bg%作业号 将前端任务移动至后端
   fg%作业号 将后端任务移动至前端
	Ctrl+Z 暂停
2、sleep 1000 & (终端断开就没了)
3、nohup sleep 1000 &
# 查看当前终端上有多少挂在后台的作业
jobs(终端断开就没了)
ps -ef 

管道
ip (-f inet) a (show dev ens33) | cut -d' ' -f6 | cut -d'/' -f1

命令排序执行
;  &&  ||
;命令分割,在一行中执行多条语句
&& 一行中执行多条语句,前面成功执行后面
|| 一行中执行多条语句,前面不成功执行后面

通配符 
通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符

正则表达式 脚本
%s/^SELINUX=.*/SELINUX=disabled/g

[root@localhost ~]# date "+%m/%d"
09/09
[root@localhost ~]# date "+%-m/%-d"
9/9

systemctl status firewalld &> /dev/null && echo "防火墙开启" || echo "防火墙关闭"
三、Shell脚本规范
1. #!/usr/bin/env bash ---shebang蛇棒, 解释器, 翻译
2. #
3. #
3. # Author: newrain
4. # Email: newrain@163.com          
5. # Github: https://github.com/newrain001
6. # Date: 2019/**/**
7. printf "hello world\n"

# 脚本执行方式
1、bash 脚本.sh
2、sh 脚本.sh
3、source 脚本.sh
4、./脚本.sh (需要执行权限)
5、. 脚本.sh
第一行: “#!/usr/bin/env bash”叫做shebang, shell语法规定shell脚本文件第一行为整个文件的解释器
第二行: 为“#”开头的行为注释行默认不会被程序所读取, 用来说明文件及标定所属人员使用, 也可用来解释程序 第七行: 为格式化打印语句printf, printf可以把后面的“hello world”打印到指定的终端中, \n 为换行符