如何运行linux shell程序 如何运行shell脚本?

linux shell\u811a\u672c\u5982\u4f55\u542f\u52a8\u4e00\u4e2ajava\u8fdb\u7a0b

\u5728shell\u811a\u672c\u4e2d\u76f4\u63a5\u6267\u884cjava\u5c31\u884c\u4e86\uff0c\u6bd4\u5982\u5199\u4e2aa.sh\u6587\u4ef6

#!/bin/bash

java a.class

\u5c31\u884c\u4e86\uff0c\u7136\u540e\u4fdd\u5b58\uff0c\u6267\u884cbash a.sh\u811a\u672c\u3002\u5982\u679c\u8981\u540e\u53f0\u8fd0\u884c\uff0c\u5219bash a.sh&

\u7f16\u5199\u597d\u7684shell\u811a\u672c\uff08\u5982\uff1atest\uff09\uff0c\u53ef\u4ee5\u91c7\u53d6\u4e24\u79cd\u65b9\u5f0f\u8fdb\u884c\u8fd0\u884c\uff1a
\u4e00\u3001 $ sh test
\u4e00\u822c\u4e0d\u91c7\u7528\u8fd9\u79cd\u8c03\u7528\u65b9\u5f0f\uff0c\u5c24\u5176\u4e0d\u91c7\u7528\u201csh<test\u201d\u7684\u8c03\u7528\u65b9\u5f0f\uff0c\u56e0\u4e3a\u8fd9\u79cd\u65b9\u5f0f\u5c06\u7981\u6b62shell\u8bfb\u53d6\u6807\u51c6\u8f93\u5165\u3002
\u4e5f\u53ef\u4ee5\u91c7\u7528 $ ksh test
\u8fd9\u79cd\u65b9\u5f0f\u8981\u6c42shell\u5177\u6709\u201c\u53ef\u8bfb\u201d\u7684\u8bbf\u95ee\u6743\u9650\u3002
\u4e8c\u3001\u76f4\u63a5\u8fd0\u884c\u53ef\u6267\u884c\u7684shell\u811a\u672c\u4e4b\u524d\uff0c\u9996\u5148\u5e94\u4f7f\u7528\u4e0b\u5217chmod\u547d\u4ee4\uff0c\u628ashell\u811a\u672c\u6587\u4ef6\u8bbe\u7f6e\u4e3a\u53ef\u6267\u884c\u7684\u6587\u4ef6\u3002
chmod 755 test\uff08\u9664\u6587\u4ef6\u5c5e\u4e3b\u53ef\u5199\u4e4b\u5916\uff0c\u6bcf\u4e2a\u7528\u6237\u5747\u5177\u6709\u8bfb\u548c\u53ef\u6267\u884c\u7684\u8bbf\u95ee\u6743\u9650\uff09
chmod +rx test\uff08\u540c\u4e0a\uff09
chmod u+rx test\uff08\u53ea\u6709\u6587\u4ef6\u5c5e\u4e3b\u5177\u6709\u8bfb\u548c\u6267\u884c\u7684\u8bbf\u95ee\u6743\u9650\uff09
\u6309\u7167\u4e0a\u8ff0\u8981\u6c42\u8bbe\u7f6eshell\u811a\u672c\u6587\u4ef6\u7684\u8bbf\u95ee\u6743\u9650\u540e\uff0c\u53ef\u91c7\u7528\u4e0b\u5217\u65b9\u5f0f\uff0c\u76f4\u63a5\u8fd0\u884cshell\u811a\u672c\u4e86\u3002
1\u3001test\uff08\u5982\u679c\u547d\u4ee4\u68c0\u7d22\u8def\u5f84\u5305\u542b\u5f53\u524d\u76ee\u5f55\uff09
2\u3001./test\uff08\u5982\u679c\u547d\u4ee4\u51cf\u7f29\u8def\u5f84\u4e0d\u5305\u542b\u5f53\u524d\u76ee\u5f55\uff09
*\u8bf4\u660e\uff1a sh test \u65b9\u5f0f\u8c03\u7528\u4e00\u4e2ashell\u53eb\u8e66\u53ef\u80fd\u4f1a\u7981\u6b62\u67d0\u4e9bshell\u7279\u5b9a\u7684\u6269\u5c55\u529f\u80fd\uff0c\u56e0\u800c\u53ef\u80fd\u5f15\u8d77\u811a\u672c\u65e0\u6cd5\u6b63\u786e\u6267\u884c\u3002

编写好的shell脚本(如:test),可以采取两种方式进行运行:\x0d\x0a一、 $ sh test\x0d\x0a一般不采用这种调用方式,尤其不采用“sh<test”的调用方式,因为这种方式将禁止shell读取标准输入。\x0d\x0a也可以采用 $ ksh test\x0d\x0a这种方式要求shell具有“可读”的访问权限。\x0d\x0a二、直接运行可执行的shell脚本之前,首先应使用下列chmod命令,把shell脚本文件设置为可执行的文件。\x0d\x0achmod 755 test(除文件属主可写之外,每个用户均具有读和可执行的访问权限)\x0d\x0achmod +rx test(同上)\x0d\x0achmod u+rx test(只有文件属主具有读和执行的访问权限)\x0d\x0a按照上述要求设置shell脚本文件的访问权限后,可采用下列方式,直接运行shell脚本了。\x0d\x0a1、test(如果命令检索路径包含当前目录)\x0d\x0a2、./test(如果命令减缩路径不包含当前目录)\x0d\x0a*说明: sh test 方式调用一个shell叫蹦可能会禁止某些shell特定的扩展功能,因而可能引起脚本无法正确执行。

如何运行shell程序,如何在shell程序以及后续脚本中使用同一个变量,这些在工作中经常用到, 我找到如下的文章,再加深复习一下。
1 source命令用法:
  source FileName
  作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"
注:该命令通常用命令“.”来替代。
如:source .bash_profile
. .bash_profile两者等效。
source(或点)命令通常用于重新执行刚修改的初始化文档。
source命令(从 C Shell 而来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell而来)。
source的程序主体是bash,脚本中的$0变量的值是bash,而且由于作用于当前bash环境,脚本中set的变量将直接起效

2 sh, bash的命令用法:
sh/bash FileName

作用:打开一个子shell来读取并执行FileName中命令。该filename文件可以无"执行权限"

注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.
在ubuntu中sh只是bash的一个链接。
由于是在子shell中执行,脚本设置的变量不会影响当前shell。

3 ./的命令用法:
./FileName
作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要"执行权限"
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.
由于是在子shell中执行,脚本设置的变量不会影响当前shell。

4 export:
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本
5. 举例
比如您在一个脚本里export $KKK=111 ,假如您用./a.sh执行该脚本,执行完毕后,您运行 echo $KKK ,发现没有值,假如您用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是 source不同他就是在本shell中执行的,所以能够看到结果.
小测试
1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2 执行命令: source test.sh
echo $s
结果输出: /home/jboss/
3 新开个shell
执行命令: ./test.sh
echo $s
结果: 没有输出s值

结论:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出。
2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。3、不用 export定义的变量只对该shell有效,对子shell也是无效的。

直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。
source可以让脚本影响它们的父shell环境,这和export去影响子shell环境相反.

扩展阅读:linux配置ip详细步骤 ... linux shell 命令 ... linux shell 菜鸟教程 ... linux shell read ... linux shell编程怎么运行 ... linux命令大全菜鸟教程 ... linux网站入口 ... linux查看硬盘详细信息 ... linux shell编程实验报告 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网