Shell系统学习之创建一个Shell程序

 系列文章目录

Shell系统学习之什么是Shell

Shell系统学习之创建一个Shell程序

Shell系统学习之向Shell脚本传递参数

Shell系统学习之如何执行Shell程序

Shell系统学习之Shell变量和引用

 Shell系统学习之Shell条件测试,判断语句和运算符

 Shell系统学习之循环结构

 Shell系统学习之函数

Shell系统学习之数组

系统学习Shell之正则表达式

Shell系统学习之文件操作

Shell系统学习之子Shell与进程处理


执行方式

Shell的执行两种执行方式:

  1. 用户可以依次输入一系列命令,交互式的执行它们
  2. 用户可以把所有的这些命令按照顺序保存在一个文件中,然后将该文件作为一个程序来执行,该文件就是所谓的Sehll脚本文件或者叫Shell脚本
eden_ubuntu@edenubuntu:~/Desktop$ for filename in `ls .`
> do
> if echo "$filename" | grep "json"
> then
> echo "$filename"
> fi
> done
test1.json
test1.json
test.json
test.json

 

当Shell期待用户下一步的输入时,正常的Shell提升符“#”将会改变为“>”。用户可以一直输入下去,由Shell来判断何时输入完毕并立即执行程序。

尽管上述方式非常快捷,但是使用起来每次执行都需要重新输入一次很是麻烦,所以在实际开发中,这种交互式的执行程序方式并不常见。我们一般会用脚本文件来执行.

创建脚本

对于一个基本的Shell程序来说,应该拥有以下基本元素

  1. #!/bin/bash. 指定命令解读器语句
  2. 注释用来说明代码的功能
  3. 可执行的语句,实现程序的功能

 脚本文件都是普通的文本文件,可以使用任何的文本编辑器查看或者修改。如下我们使用vi命令创建一个脚本文件1-2.sh

#!/bin/sh
#循环遍历
for filename in `ls .`
do
        if echo "$filename" | grep "json"
        then
                echo "$filename"
        fi
done

Shell程序中的注释以“#”符号开始。请注意第一行的#!/bin/sh,它是一种特殊形式的注释,其中“#!”字符告诉系统同一行中紧跟在它后面的那个参数是用来执行本文件的程序,这里指定解释器的绝对路径。

Shell脚本的规定使得用户可以非常灵活地调用任何解释器,而不仅仅是Shell程序,比如其他命令

#指定解释器
#!/bin/more
echo "Hello world!"

 执行结果是:

eden_ubuntu@edenubuntu:~/Documents/Shell$ ./1-7.sh 
#!/bin/more
echo "Hello world!"

如何注释

单行注释 #输出字符串

多行注释:实例如下

#!/bin/bash
:<<BLOCK
本脚本的作用是输出一行字符串
作者:Eden
BLOCK
echo "Hello world"

 结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell$ ./1-8.sh 
Hello world

把脚本设置为可执行

当编辑完脚本文件后,这个脚本还不能马上执行,因为该脚本还没有可执行的权限。我们使用命令ls -l或者ll看下

eden_ubuntu@edenubuntu:~/Documents/Shell$ ll
total 12
drwxrwxr-x 2 eden_ubuntu eden_ubuntu 4096 Jul  2 20:08 ./
drwxr-xr-x 5 eden_ubuntu eden_ubuntu 4096 Jul  2 20:01 ../
-rw-rw-r-- 1 eden_ubuntu eden_ubuntu  105 Jul  2 20:03 1-2.sh

r表示可读权限,w表示可写权限,x表示可执行权限;可以看到1-2.sh并没有可执行权限

我们执行下脚本文件看看结果:

eden_ubuntu@edenubuntu:~/Documents/Shell$ ./1-2.sh
bash: ./1-2.sh: Permission denied

提示Permission denied,就是权限不够。

我们需要给该脚本文件赋予可执行的权限,这里使用chmod命令

eden_ubuntu@edenubuntu:~/Documents/Shell$ chmod u+x 1-2.sh 
eden_ubuntu@edenubuntu:~/Documents/Shell$ ll
total 12
drwxrwxr-x 2 eden_ubuntu eden_ubuntu 4096 Jul  2 20:08 ./
drwxr-xr-x 5 eden_ubuntu eden_ubuntu 4096 Jul  2 20:01 ../
-rwxrw-r-- 1 eden_ubuntu eden_ubuntu  105 Jul  2 20:03 1-2.sh*

或者使用chmod 744 1-2.sh也可以达到目的。具体的chmod命令说明请查看其他文章

现在我们再执行1-2.sh,结果与之前交互性执行的一致

eden_ubuntu@edenubuntu:~/Documents/Shell$ ./1-2.sh 
test1.json
test1.json
test.json
test.json

概括

当我们需要执行多条Shell命令组合执行一个特定的任务时,我们最好使用脚本文件,将执行命令输入到脚本文件中。并且赋予脚本文件可执行的权限。

有两点注意:

  1. “#!”这个特殊的注释,表示我们使用哪个Shell程序。一般有“#!/bin/sh”,"#!/bin/bash"
  2. 脚本文件里tab键来表示代码层次的,并不是必须的。没有也不影响Shell脚本的正确执行,这个只是我们为了让代码更加好阅读。
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值