Shell脚本
- 脚本格式
- 第一个Shell脚本:hello.sh
- 脚本常用执行方式
- 1. bash或sh+脚本的相对路径或绝对路径
- 2. 输入脚本的绝对路径或相对路径
- 3. 在脚本的路径前加上.或者source
脚本格式
脚本以#!/bin/bash
开头(指定解析器)
#!
是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
第一个Shell脚本:hello.sh
需求:创建一个shell脚本,输出hello world!
root@ubuntu:/home/yys# mkdir scripts #创建文件夹
root@ubuntu:/home/yys# cd scripts
root@ubuntu:/home/yys/scripts# touch hello.sh #创建文件
root@ubuntu:/home/yys/scripts# vim hello.sh #编辑文件
若出现如下报错:
The program 'vim' can be found in the following packages:
* vim
* vim-gnome
* vim-tiny
* vim-athena
* vim-gtk
* vim-nox
Try: sudo apt-get install <selected package>
解决方法
界面如下
输入
#!/bin/bash
echo "hello world!"
第一个Shell脚本就写好了,输入命令:wq
保存并退出
若输入时出现报错E348:No string under cursor
解决方法
脚本常用执行方式
1. bash或sh+脚本的相对路径或绝对路径
当前目录下输入命令bash [filename]
其他目录下,输入相对路径执行bash scripts/[filename]
或使用绝对路径
2. 输入脚本的绝对路径或相对路径
- 赋予脚本的+x权限
chmod +x [filename]
有可执行权限时文件名变为绿色
- 执行脚本
相对路径
其中.
指当前工作目录
绝对路径
注意:必须具有可执行权限,即
+x
,否则报错
查看文件权限的方法:输入命令ll [文件夹]
如果在当前工作目录下有.sh文件,直接输入命令[filename].sh
,shell会当作一条命令处理,会报错未找到命令,不能执行。
第一种方式相当于使用bash
命令,开启一个bash进程,文件名相当于参数,本质是bash解析器执行脚本,所以脚本本身不需要执行权限;第二种方式实在当前的bash环境执行脚本,所以必须要有可执行权限。
3. 在脚本的路径前加上.或者source
source
和 .
是bash shell的内部命令
前两种方式是在当前shell打开一个子shell脚本来执行脚本内容,当脚本内容结束则关闭子shell,回到父shell中。
实例:
61563是2493的子进程
此时退出子进程
第三种方式可以使脚本内容在当前shell里执行,而无需打开子shell。这也是每次修改完/etc/profile
后,需要source
的原因。
两者的区别在于环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。