14、shell 基础

1、shell 基础

1.1、shell 概述

shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 shell 来启动、挂起、停止甚至是编写一些程序

它还是一个功能强大的编程语言,易编写,易调试,灵活性强。shell 是解释执行的脚步语言,在 shell中可以直接调用 Linux 系统命令

1.2、shell 的分类

  • Bourne shell:从 1979年起 Unix 就开始使用 Bourne Shell,主文件名为 sh
  • C Shell:C Shell 主要在 BSD 版的 Unix 系统中使用,语法与 C语言相类似而得名
  • Shell 的两种主要语法类型有 Bourne 和 C,彼此不兼容,Bourne 家族主要包括 sh、ksh、Bash(当前Linux中主要用这个)、psh、zsh;C家族主要包括 csh、tcsh
//查看当前Shell 类型
[root@localhost ~]# echo $SHELL
/bin/bash

//查看 Bash 兼容 Shell
[root@localhost ~]vim /etc/shells         // 在shells目录下可以看到与 bash 兼容的 Shell,也就是说可以使用兼容 Shell
[root@localhost ~]sh           //调用 sh
sh-4.1# exit                    //退出 sh

1.3、脚本执行方式

输出命令:echo

echo [选项] [输出内容]

选项:

​ -e:支持反斜杠控制的字符转换

[root@localhost ~]# echo "hello world"     //有空格时需要加 双引号
hello world
[root@localhost ~]# echo hello
hello

控制字符:

[root@localhost ~]# echo -e "hello \t world"
hello    world
[root@localhost ~]# echo -e "hello \r world"
 world
[root@localhost ~]# echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t"   //按照十六进制ASCII码也同样可以输出(x 表示十六进制,68表示h ...)
h   e   l
l   o   

输出颜色:

// 30m=黑色,31m=红色,32=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色
\e:表示调用颜色,[1:表示开启颜色选项,\e[0m:表示关闭颜色
[root@localhost ~]# echo -e "\e[1;31m 我爱你 \e[0m "  //输出颜色(红色)
 我爱你 

PS:Linux 中 ! 有特殊含义,一般不加;Linux 纯字符界面不支持 中文,xshell 和 图形界面支持中文

1.4、第一个脚本

Shell 可以直接调用运行脚本,Linux 中 # 代表注释,但是脚本语言中 #!/bin/bash 不是注释,也不能省略,它是标准的脚本语言格式

[root@localhost ~]# vim hello.sh   //创建一个名为 hello.sh 的脚本
#!/bin/bash
#The first program          //注释
echo -e "\e[1;34m 天上掉下一个林妹妹 \e[0m"

脚本执行:

  • 方法1:脚本执行需要赋予执行权限,才能运行
chmod 755 hello.sh
./hello.sh      //相对路径,./ 表示当前路径
/root/hello.sh      //或者绝对路径执行
  • 方法2:通过Bah 调用执行脚本(不用赋予权限)
bash hello.sh

1.5、Bash 的基本功能

1.5.1、命令别名与快捷键

01、查看和设定别名:

alias       //查看系统中所有的命令别名
alias 别名= '原命令'     //设定命令别名,重启失效
alias ls='ls --color=auto'
alias vi='vim'      //将 vim 设定为 vi 

02、别名永久生效与删除别名:

vim ~/.bashrc      //写入环境变量配置文件,~ 表示家目录
alias vi='vim'
source .bashrc      //使bashrc生效
unalias 别名          //删除别名,永久删除也需要删除配置文件里的命令

03、命令生效顺序:

  • 第一顺位:使用绝对路径或相对路径执行的命令
  • 第二顺位:执行别名
  • 第三顺位:执行 Bash 的内部命令
  • 第四顺位:执行按照 $PATH 环境变量定义的目录查找顺序的第一个命令

04、常用快捷键:

  • ctrl + c 强制终止当前命令
    ctrl + l 清屏
    ctrl + a 光标移动到命令行首
    ctrl + e 光标移动到命令行尾
    ctrl + u 从光标所在位置删除行首
    ctrl + z 把命令放入后台
    ctrl + r 在历史命令中搜索

1.5.2、历史命令

  • bash_history 是上次登录注销后正确保存的命令
  • 历史命令默认保存 1000 条,可以在环境变量配置文件 /etc/profile 中进行修改,打开找到 HISTSIZE=1000修改成你需要的即可
history [选项] [历史命令保存文件]
cat .bash_history 
history -w

选项:

​ -c 清空历史命令

​ -w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history

历史命令的调用:

  • 使用上、下箭头调用以前的历史命令
  • 使用 “!n” 重复执行第 n 条历史命令
  • 使用 “!!” 重复执行上一条命令
  • 使用 “!字串” 重复执行最后一条以该字串开头的命令

1.5.3、命令与文件补全

在 Bash 中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按 “Tab” 键就会自动进行补全;依赖 PATH

还可以补全目录,按两下 Tab 键

1.5.4、输出重定向

01、标准输入输出:

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

02、输出重定向:

标准输出是输出到显示屏,输出重定向是将输出结果输出到指定文件/目录或设备中,这样的好处是在没人值守时也能看到输出结果

[root@localhost ~]# ifconfig > test.log        //将网卡信息输出到 test.log文件中,文件不存在则会自动创建

PS:

  • 一个 > 会覆盖,两个 > 是追加
  • 保存错误信息需要用到 标准错误输出 错误命令 2>>文件
  • 标准错误输出,2>>文件,是没有空格的

[root@localhost ~]# cat xdy >> access.log 2>>error.log
[root@localhost ~]# cat error.log
cat: xdy: 没有那个文件或目录

03、Linux中的黑洞:

ls &>/dev/null      //  /dev/null 相当于win中的回收站,输出进去即不会显示在显示屏,也不会显示在文件中(相当于消失了),适用于程序运行时,不要看程序进程(把进程丢弃),只看结果

1.5.5、输入重定向

一般用于打补丁,其他情况很少用到

[root@localhost ~]# wc [选项] [文件名]

选项:

​ -c 统计字节数

​ -w 统计单词数

​ -l 统计行数

//输入 wc 后,回车再输入 字符,输入完成后再  ctrl + d
[root@localhost ~]# wc                             
ssss  ss ss
ss
      2       4      15
  • 命令<文件把文件作为命令的输入 (统计文件的内容 wc < access.log)
  • 命令<<标识符 (统计两个标识符之间的内容)
  • 标识符把标识符之间内容作为命令的输入

1.5.6、管道符

01、多命令顺序执行:

系统自动判别脚本 / 命令是否错误的方法:

通过多命令顺序执行,简化成最后只要判断是否是 yes 或 no 就能判断

[root@localhost ~]# ls && echo yes || echo no      //命令正确运行,则打印 yes,不正确打印 no
abc         anaconda-ks.cfg  hello.sh     install.log.syslog
abc.tar.gz  error.log        install.log
yes

02、管道符:

管道符(|),命令 1 的正确输出作为命令2 的操作对象

[root@localhost ~]# 命令1 | 命令2      //命令 1 的正确输出作为命令2 的操作对象
ls -l /etc | more   //表示,more(分屏)查看ls 的结果,more命令用来查看文件

查看服务器中所有的连接,并统计

  • LISTEN:监听
  • ESTABLISHED:正在连接
[root@localhost ~]# netstat -an        //查看系统中所有的网络连接
[root@localhost ~]# netstat -an | grep ESTABLISHED     //显示所有的正在连接的会话
tcp        0     52 192.168.0.139:22            192.168.0.132:50625         ESTABLISHED 
[root@localhost ~]# netstat -an | grep ESTABLISHED | wc -l //统计所有连接数
1

1.5.7、通配符

01、通配符:

Linux 中用来通配符来匹配目录或文件名,用正则表达式来匹配文件内容

[root@localhost film]# ls
dy1  dy2  dy34  dyab  dyc
[root@localhost film]# ls dy*
dy1  dy2  dy34  dyab  dyc
[root@localhost film]# ls dy?
dy1  dy2  dyc
[root@localhost film]# ls dy[0-9]
dy1  dy2
[root@localhost film]# ls dy[0-9][0-9]
dy34
[root@localhost film]# ls dy[^0-9]
dyc
[root@localhost film]# ls dy[^0-9]*
dyab  dyc

02、Bash 中其他特殊符号:

变量:

  • 变量的定义不能有空格
  • 使用 $ 调用变量的值
//变量的定义
[root@localhost ~]# aa=123
[root@localhost ~]# echo $aa
123

单引号双引号:

//单引号双引号
[root@localhost ~]# aa=123
[root@localhost ~]# echo '$aa'    //特殊字符无特殊含义
$aa

[root@localhost ~]# echo "$aa"
123

反引号:

//反引号
[root@localhost ~]# bb=`ls`
[root@localhost ~]# echo "$bb"
abc
abc.tar.gz
anaconda-ks.cfg
error.log
film
hello.sh
install.log
install.log.syslog

$()、转义字符:

//$()、转义字符
[root@localhost ~]# cc=$(ls)  //与反引号结果一致
[root@localhost ~]# echo $cc
abc abc.tar.gz anaconda-ks.cfg error.log film hello.sh install.log install.log.syslog

[root@localhost ~]# echo \$cc
$cc

猜你喜欢

转载自blog.csdn.net/hj1993/article/details/81841148
今日推荐