脚本以#!/bin/bash
开头(指定解析器)
#!
是一个约定的标记,告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
需求:创建一个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
解决方法
界面如下
输入
#!/bin/bash
echo "hello world!"
第一个Shell脚本就写好了,输入命令:wq
保存并退出
若输入时出现报错E348:No string under cursor
解决方法
当前目录下输入命令bash [filename]
其他目录下,输入相对路径执行bash scripts/[filename]
或使用绝对路径
有可执行权限时文件名变为绿色
.
指当前工作目录注意:必须具有可执行权限,即
+x
,否则报错
查看文件权限的方法:输入命令ll [文件夹]
如果在当前工作目录下有.sh文件,直接输入命令[filename].sh
,shell会当作一条命令处理,会报错未找到命令,不能执行。
第一种方式相当于使用bash
命令,开启一个bash进程,文件名相当于参数,本质是bash解析器执行脚本,所以脚本本身不需要执行权限;第二种方式实在当前的bash环境执行脚本,所以必须要有可执行权限。
source
和 .
是bash shell的内部命令
前两种方式是在当前shell打开一个子shell脚本来执行脚本内容,当脚本内容结束则关闭子shell,回到父shell中。
实例:
61563是2493的子进程
此时退出子进程
第三种方式可以使脚本内容在当前shell里执行,而无需打开子shell。这也是每次修改完/etc/profile
后,需要source
的原因。
两者的区别在于环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
上一篇:计算机网络(性能指标)
下一篇:软件行业的面试经验分享