从此刻开始跟我一起学习shell 相关知识吧
我们既然要开始学习shell相关的知识,那自然而然需要知道当前Linux系统中都支持哪几种shell。 那么我们应该如何查找呢
[root@localhost day01]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
当我们需要下载新的shell,下载结束后,也可以在此文件中体现出来。
只知道当前Linux系统支持哪几种shell是不够的,最关键的是我们要知道如何切换shell
[root@localhost ~]# echo $SHELL
/bin/sh
[root@localhost ~]# chsh root -s /bin/bash
Changing shell for root.
Shell changed.
[root@localhost ~]# echo $SHELL
/bin/bash
注释的目的是为了干什么呢。 我们的开发跟运维一样,代码写出来都是为了给人看的,所以合理的书写注释是非常重要的。
但是在shell中 注释有哪几种呢,今天就让我们一起来看看
[root@localhost day02]# cat shell01.sh
#!/bin/bash# 这是一个预备shell
:<
上面我们已经学习了各种shell的前奏知识了,尽管我们可以查看分类,切换shell了。但是我们总不能每次都切换吧。我们是不是也可以看下当前的shell 是否符合我们的预期呢
接下来让我们一起看下,如何查看当前shell类型
[root@localhost day02]# echo $SHELL
/bin/bash
通过上面的讲解我们已经具备了shell的一些前奏知识,还差倒数第二步,如何执行shell
有的人认为shell 不是以.sh
为后缀吗? 直接执行不就行了。no,no,no 如果你也是这么认为的就错了。 其实后缀对bash等来说可有可无,只要指定运行的shell就可以了。接下来让我们看下具体的实例。
通过绝对路径方式来执行,需要明确指定依赖的shell执行器,以及shell文件本身
[root@localhost day02]# echo $SHELL
/bin/bash
[root@localhost day02]# /bin/bash /var/my/day02/shell02
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
shell文件本身用相对位置也是可以的。但是shell执行器必须明确指定
[root@localhost day02]# /bin/bash ./shell02
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
可以直接执行shell文件本身。但是会出现一个错误:没有执行权限
。
所以我们需要给其添加执行权限后,再次执行。
[root@localhost day02]# ./shell02
-bash: ./shell02: Permission denied
[root@localhost day02]# chmod +x ./shell02
[root@localhost day02]# ./shell02
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
[root@localhost day02]#
其实关键字source
本身是加载的功能,但是内部含有执行的功能,所以可以执行shell文件,但是我们不推荐。
[root@localhost day02]# source ./shell02
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/zsh
现在shell文件都会执行了。但是我们不能保证每次执行的时候,写的文件都是正确的。毕竟shell文件没有单独的编辑器,都是靠纯文本的。
所以进行shell的调试就非常重要了。接下来让我们看下调试shell的几种方式
直接进行语法的检查。
[root@localhost day02]# /bin/bash -n ./shell03
./shell03: line 11: syntax error: unexpected end of file
[root@localhost day02]# cat ./shell03
#!/bin/bash# 这是一个预备shell
:<
先显示脚本所有内容,然后执行脚本,结果输出,如果执行遇到错误,将错误输出
[root@localhost day02]# /bin/bash -v ./shell03
#!/bin/bash# 这是一个预备shell
:<
将执行的每一条命令和执行结果都打印出来
[root@localhost day02]# /bin/bash -x ./shell03
+ :
+ cat: /etc/shells
./shell03: line 9: cat:: command not found
./shell03: line 11: syntax error: unexpected end of file
[root@localhost day02]# cat shell04
#!/bin/bashifconfig eth0 | grep -w inet | awk '{print $2}' | xargs echo "IP: "
[root@localhost day02]# /bin/bash ./shell04
IP: 10.0.2.15
-w
使用grep检索,按单词进行检索。awk
按空格进行分段,获取第2段xargs
进行命令结果传递,将echo结果跟管道符传递过来的结果拼接
上一篇:每日学术速递2.9