如果可以在shell中输入命令,那么你就可以使用shell脚本。所谓的shell脚本,就是将一系列的命令写在一个文档中,然后让shell从该文件中读取命令,就像是从终端进行读取一样。
Shell脚本的工作方式主要有两种:交互式和批处理。
1.用bash解释器命令运行脚本文件
创建脚本文件
qi:desktop ZB$ vim example.sh
脚本中的内容:
#!/bin/bash
#For Example BY ZB.com
pwd
ls -al
第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行脚本;
第二行的注释信息(#)是对于脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本文件的时候,可以快速知道该脚本的作用或一些警告信息。
第三、四行的可执行语句就是我们平时执行的Linux命令了 。
执行脚本程序:
qi:desktop ZB$ bash example.sh
/Users/ZB/desktop
total 2778568
drwxr-xr-x@ 4 ZB staff 136 3 17 2018 $RECYCLE.BIN
drwx------+ 29 ZB staff 986 11 16 20:12 .
drwxr-xr-x@ 46 ZB staff 1564 11 16 20:12 ..
-rw-r--r--@ 1 ZB staff 24580 11 16 18:16 .DS_Store
-rw------- 1 ZB staff 12288 11 16 17:01 .lhj.c.swp
-rw-r--r-- 1 ZB staff 0 7 14 2017 .localized
drwxrwxrwx 25 ZB staff 850 8 10 2017 Eclipse版本源码
drwxr-xr-x 16 ZB staff 544 6 30 16:07 FinallyHomeWork
-rw-r--r--@ 1 ZB staff 130560 6 10 13:07 Thumbs.db
drwxrwxrwx@ 7 ZB staff 238 11 15 11:10 VarDict-1.5.7
-rw-r--r--@ 1 ZB staff 2592 7 3 19:53 ViewGroup.rtf
-rw-r--r-- 1 ZB staff 39785 6 24 17:07 Westworld.S02E01.Journey.Into.Night.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.简体&英文.docx
-rw-r--r--@ 1 ZB staff 711156927 11 10 22:38 cd1.mp4
-rw-r--r--@ 1 ZB staff 711150870 11 10 22:50 cd2.mp4
-rw-r--r--@ 1 ZB staff 282 4 19 2018 desktop.ini
-rw-r--r--@ 1 ZB staff 1939 2 12 2018 eclipse - 快捷方式.lnk
-rw-r--r-- 1 ZB staff 48 11 16 20:12 example.sh
-rw-r--r--@ 1 ZB staff 751 6 9 21:41 recyclerview依赖.rtf
drwxr-xr-x@ 17 ZB staff 578 7 4 22:34 ui
drwxr-xr-x 84 ZB staff 2856 2 2 2018 vs
drwxr-xr-x 10 ZB staff 340 3 2 2018 错误
drwxr-xr-x 259 ZB staff 8806 1 14 2018 保定&泰安
-rw-r--r--@ 1 ZB staff 544 7 4 02:18 图标.rtf
-rw-r--r--@ 1 ZB staff 2113 7 1 17:17 日报.rtf
-rw-r--r--@ 1 ZB staff 882 7 4 10:10 安卓AS快捷键.rtf
drwxrwxrwx 14 ZB staff 476 11 16 16:32 栾海晶
-rw-r--r--@ 1 ZB staff 52473 11 4 23:41 未命名.rtf
drwxr-xr-x 12 ZB staff 408 6 24 16:28 西部世界
drwxr-xr-x 75 ZB staff 2550 2 19 2018 过年姥爷家
2.通过输入完整的路径的方式来执行
qi:desktop ZB$ ./example.sh
-bash: ./example.sh: Permission denied
因为权限不足而提示报错信息。
qi:desktop ZB$ chmod u+x example.sh
qi:desktop ZB$ ./example.sh
/Users/ZB/desktop
total 2778568
drwxr-xr-x@ 4 ZB staff 136 3 17 2018 $RECYCLE.BIN
drwx------+ 29 ZB staff 986 11 16 20:12 .
drwxr-xr-x@ 46 ZB staff 1564 11 16 20:12 ..
-rw-r--r--@ 1 ZB staff 24580 11 16 18:16 .DS_Store
-rw------- 1 ZB staff 12288 11 16 17:01 .lhj.c.swp
-rw-r--r-- 1 ZB staff 0 7 14 2017 .localized
drwxrwxrwx 25 ZB staff 850 8 10 2017 Eclipse版本源码
drwxr-xr-x 16 ZB staff 544 6 30 16:07 FinallyHomeWork
-rw-r--r--@ 1 ZB staff 130560 6 10 13:07 Thumbs.db
drwxrwxrwx@ 7 ZB staff 238 11 15 11:10 VarDict-1.5.7
-rw-r--r--@ 1 ZB staff 2592 7 3 19:53 ViewGroup.rtf
-rw-r--r-- 1 ZB staff 39785 6 24 17:07 Westworld.S02E01.Journey.Into.Night.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.简体&英文.docx
-rw-r--r--@ 1 ZB staff 711156927 11 10 22:38 cd1.mp4
-rw-r--r--@ 1 ZB staff 711150870 11 10 22:50 cd2.mp4
-rw-r--r--@ 1 ZB staff 282 4 19 2018 desktop.ini
-rw-r--r--@ 1 ZB staff 1939 2 12 2018 eclipse - 快捷方式.lnk
-rwxr--r-- 1 ZB staff 48 11 16 20:12 example.sh
-rw-r--r--@ 1 ZB staff 751 6 9 21:41 recyclerview依赖.rtf
drwxr-xr-x@ 17 ZB staff 578 7 4 22:34 ui
drwxr-xr-x 84 ZB staff 2856 2 2 2018 vs
drwxr-xr-x 10 ZB staff 340 3 2 2018 错误
drwxr-xr-x 259 ZB staff 8806 1 14 2018 保定&泰安
-rw-r--r--@ 1 ZB staff 544 7 4 02:18 图标.rtf
-rw-r--r--@ 1 ZB staff 2113 7 1 17:17 日报.rtf
-rw-r--r--@ 1 ZB staff 882 7 4 10:10 安卓AS快捷键.rtf
drwxrwxrwx 14 ZB staff 476 11 16 16:32 栾海晶
-rw-r--r--@ 1 ZB staff 52473 11 4 23:41 未命名.rtf
drwxr-xr-x 12 ZB staff 408 6 24 16:28 西部世界
drwxr-xr-x 75 ZB staff 2550 2 19 2018 过年姥爷家
脚本可以接收用户传进来的参数
创建脚本文件
qi:desktop ZB$ vim example.sh
脚本中的内容:
#!/bin/bash
echo "当前脚本的名称是$0"
echo "总共有$#个参数,分别是$*。"
echo "第一个参数为$1,第五个为$5。"
$0代表的是当前脚本的名称。
$#代表有几个参数。
$*代表所有位置的参数值。
$?显示上一次命令的执行返回值。
$1、$2、$3···代表的是第N个位置的参数值。
执行脚本程序:
qi:desktop ZB$ sh example.sh one two three four five six
当前脚本的名称是example.sh
总共有6个参数,分别是one two three four five six。
第一个参数为one,第五个为five。
补充知识:
一、KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲、n 、$0、 *的区别
$#:统计脚本中所有参数的个数
$*:对应参数的值
$n:n>=1 对应于第n个参数的值
$0:表示相应的脚本名称。例如下图的countpeople.sh
$@:会显示出所接受的所有参数。
二、条件判断函数的编写。