关于小悟志网站地图归档友情链接联系Feed

云上小悟 + 

首页 » InfoTech »

如何执行shell脚本?

2017年9月18日 / 44次阅读
Linux

文章《如何执行shell脚本?》的特色图片

记得在一本书中看到过,Linux有个特点,即脚本无处不在。我们也可以说shell脚本。脚本不同于程序,脚本只是一系列的字符组成的文本,不需要程序的编译链接过程,脚本的执行确需要一个程序,这个程序就是shell。不展开了,本文主要说明如何执行Linux的shell脚本。

 

创建脚本实例

假设pwd看到的这个目录下,有一个test脚本,内容如下就是3条命令。

xinlin@ubuntu:~$ pwd
/home/xinlin
xinlin@ubuntu:~$ ls -l test
-rwxrw-r-- 1 xinlin xinlin 34 Sep 17 21:49 test
xinlin@ubuntu:~$ cat test
pwd
ls -l
echo 'Linux shell test'

需要注意一个细节,脚本并不是一定需要.sh后缀,可以没有后缀(如本例),或者任意其它后缀。脚本只是一个文本文件,使用.sh后缀,只是一个习惯,让大家一看就知道,哦,这个是shell脚本。

有人说这个脚本不规范,是的,第一行缺少#!/bin/bash,来指定一个shell程序。通常情况下,我们都是使用bash;如这个脚本,就算我们不指定,也是bash来默认执行。

还有个细节,我们创建了这个shell脚本文件后,还要赋给它可执行的权限:

chmod 764 test

chmod +x test

第一行命令只给创建脚本的用户以执行的权限;第二行命令还给于创建脚本用户所在同一组用户以执行的权限。

 

方法一:使用相对路径执行脚本

如果现在pwd就在此脚本通目录下,用下面的命令执行:

xinlin@ubuntu:~$ ./test
/home/xinlin
total 52
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Desktop
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Documents
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Downloads
-rw-r--r-- 1 xinlin xinlin 8980 Jul 7 03:30 examples.desktop
-rwxr--r-- 1 xinlin xinlin 244 Jul 23 06:34 first.sh
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Music
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Pictures
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Public
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Templates
-rwxrw-r-- 1 xinlin xinlin 34 Sep 17 21:49 test
drwxr-xr-x 2 xinlin xinlin 4096 Jul 7 03:45 Videos
Linux shell test
xinlin@ubuntu:~$

 

方法二:使用绝对路径执行shell脚本

xinlin@ubuntu:~$ cd /
xinlin@ubuntu:/$ /home/xinlin/test
/
total 100
drwxr-xr-x 2 root root 4096 Jul 13 00:46 bin
drwxr-xr-x 3 root root 4096 Aug 6 00:44 boot
drwxrwxr-x 2 root root 4096 Jul 7 03:24 cdrom
drwxr-xr-x 17 root root 3840 Sep 17 21:42 dev
drwxr-xr-x 131 root root 12288 Aug 6 00:44 etc
drwxr-xr-x 3 root root 4096 Jul 7 03:30 home
lrwxrwxrwx 1 root root 32 Aug 6 00:42 initrd.img -> boot/initrd.img-4.4.0-89-generic
lrwxrwxrwx 1 root root 33 Jul 22 02:19 initrd.img.old -> boot/initrd.img-4.10.0-27-generic
drwxr-xr-x 22 root root 4096 Jul 7 03:38 lib
drwxr-xr-x 2 root root 4096 Jul 13 00:44 lib64
drwx------ 2 root root 16384 Jul 7 03:18 lost+found
drwxr-xr-x 3 root root 4096 Jul 19 2016 media
drwxr-xr-x 2 root root 4096 Jul 19 2016 mnt
drwxr-xr-x 2 root root 4096 Jul 7 03:43 opt
dr-xr-xr-x 228 root root 0 Sep 17 21:41 proc
drwx------ 4 root root 4096 Jul 22 21:49 root
drwxr-xr-x 24 root root 740 Sep 17 21:48 run
drwxr-xr-x 2 root root 12288 Jul 13 00:48 sbin
drwxr-xr-x 2 root root 4096 Jun 29 2016 snap
drwxr-xr-x 2 root root 4096 Jul 19 2016 srv
dr-xr-xr-x 13 root root 0 Sep 17 21:49 sys
drwxrwxrwt 11 root root 4096 Sep 17 21:57 tmp
drwxr-xr-x 11 root root 4096 Jul 19 2016 usr
drwxr-xr-x 14 root root 4096 Jul 19 2016 var
lrwxrwxrwx 1 root root 29 Aug 6 00:42 vmlinuz -> boot/vmlinuz-4.4.0-89-generic
lrwxrwxrwx 1 root root 30 Jul 22 02:19 vmlinuz.old -> boot/vmlinuz-4.10.0-27-generic
Linux shell test
xinlin@ubuntu:/$

退到根目录,然后使用绝对路径执行这个shell脚本。

注意,细心的同学可能已经发现,同样的test脚本,两次执行结果不一样。

是的,被发现了,脚本的执行跟路径有关,因为test脚本里面的命令并没有指定绝对路径,所以在不同的路径下执行结果不一样。

 

方法三:直接用shell程序执行脚本

xinlin@ubuntu:/$ bash /home/xinlin/test
/
total 100
drwxr-xr-x 2 root root 4096 Jul 13 00:46 bin
drwxr-xr-x 3 root root 4096 Aug 6 00:44 boot
drwxrwxr-x 2 root root 4096 Jul 7 03:24 cdrom
drwxr-xr-x 17 root root 3840 Sep 17 21:42 dev
drwxr-xr-x 131 root root 12288 Aug 6 00:44 etc
drwxr-xr-x 3 root root 4096 Jul 7 03:30 home
lrwxrwxrwx 1 root root 32 Aug 6 00:42 initrd.img -> boot/initrd.img-4.4.0-89-generic
lrwxrwxrwx 1 root root 33 Jul 22 02:19 initrd.img.old -> boot/initrd.img-4.10.0-27-generic
drwxr-xr-x 22 root root 4096 Jul 7 03:38 lib
drwxr-xr-x 2 root root 4096 Jul 13 00:44 lib64
drwx------ 2 root root 16384 Jul 7 03:18 lost+found
drwxr-xr-x 3 root root 4096 Jul 19 2016 media
drwxr-xr-x 2 root root 4096 Jul 19 2016 mnt
drwxr-xr-x 2 root root 4096 Jul 7 03:43 opt
dr-xr-xr-x 228 root root 0 Sep 17 21:41 proc
drwx------ 4 root root 4096 Jul 22 21:49 root
drwxr-xr-x 24 root root 740 Sep 17 21:48 run
drwxr-xr-x 2 root root 12288 Jul 13 00:48 sbin
drwxr-xr-x 2 root root 4096 Jun 29 2016 snap
drwxr-xr-x 2 root root 4096 Jul 19 2016 srv
dr-xr-xr-x 13 root root 0 Sep 17 21:49 sys
drwxrwxrwt 11 root root 4096 Sep 17 21:57 tmp
drwxr-xr-x 11 root root 4096 Jul 19 2016 usr
drwxr-xr-x 14 root root 4096 Jul 19 2016 var
lrwxrwxrwx 1 root root 29 Aug 6 00:42 vmlinuz -> boot/vmlinuz-4.4.0-89-generic
lrwxrwxrwx 1 root root 30 Jul 22 02:19 vmlinuz.old -> boot/vmlinuz-4.10.0-27-generic
Linux shell test
xinlin@ubuntu:/$

 

以上介绍了3种在Linux下执行shell脚本的方法,足够YY了。

本文链接:http://www.maixj.net/ict/shell-16509
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

《如何执行shell脚本?》有4条评论

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.

  • 麦新杰

    We use the ./ to indicate that the program is located in the current directory. [ ]

    • 麦新杰

      How your linux system know which program should be loaded to run your script? It's in the first shebang line of your script. [ ]

  • 麦新杰

    脚本有一个编译好的程序去执行它,从这个角度看,HTML网页也是一种脚本;程序不是脚本,需要编译之后才能执行。脚本是程序执行,程序是CPU执行。 [ ]

  • 麦新杰

    以前叫批处理文件,现在升级都是脚本了。 [ ]


前一篇:
后一篇:

栏目精选


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
拍拍贷
go to top