linux给shell脚本赋权,shell脚本4种执行方式

Linux中shell脚本的执行通常有4种方式,分别为工作目录执行,绝对路径执行,sh执行,shell环境执行。

首先,看下我们的脚本内容

[tan@tan scripts]$ ll

total 4

-rw-rw-r--. 1 tan tan 68 May 8 23:18 test.sh

[tan@tan scripts]$ cat test.sh

#!/usr/bin/bash

/usr/bin/python <

print "Hello Shell"

EOF

1、工作目录执行

工作目录执行,指的是执行脚本时,先进入到脚本所在的目录(此时,称为工作目录),然后使用 ./脚本方式执行

[tan@tan scripts]$ ./test.sh

-bash: ./test.sh: Permission denied

[tan@tan scripts]$ chmod 764 test.sh

[tan@tan scripts]$ ./test.sh

Hello Shell

如图,报了权限错误,上一篇博文有提到,这里需要赋权,使用chmod 764 test.sh 赋权后就可以正常执行了

./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录 (/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

2、绝对路径执行

绝对路径中执行,指的是直接从根目录/到脚本目录的绝对路径

[tan@tan scripts]$ pwd

/home/tan/scripts

[tan@tan scripts]$ `pwd`/test.sh

Hello Shell

[tan@tan scripts]$ /home/tan/scripts/test.sh

Hello Shell

这里 `pwd` 指的是该命令执行结果,等同于 /home/tan/scripts

3、sh执行

sh执行,指的是用脚本对应的sh或bash来接着脚本执行

[tan@tan scripts]$ sh test.sh

Hello Shell

[tan@tan scripts]$ bash test.sh

Hello Shell

注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三 是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用 指定bash路径自然也好理解了啊,呵呵……。

4、shell环境执行

shell环境执行,指的是在当前的shell环境中执行,可以使用 . 接脚本 或 source 接脚本

[tan@tan scripts]$ . test.sh

Hello Shell

[tan@tan scripts]$ source test.sh

Hello Shell

总结

以上所述是小编给大家介绍的shell脚本4种执行方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

### Linux 文件分发 Shell 脚本示例 #### 创建批量分发脚本赋权 为了能够顺利地在多个主机上分发文件,首先需要创建一个可执行Shell脚本。此操作可以通过以下命令完成: ```bash touch /usr/shell/scp.sh && chmod 777 /usr/shell/scp.sh ``` 这一步骤确保了`scp.sh`文件存在并且具有足够的权限来被执行[^1]。 #### 定义批量处理的目标主机列表 接下来,在脚本内部定义目标服务器地址列表。这部分内容可以根据实际情况调整,比如读取配置文件中的IP地址或主机名列表。这里简单展示一种方式——直接在脚本内硬编码hostnames: ```bash #!/bin/bash HOSTS=("host1.example.com" "host2.example.com") # 替换成实际的目标机器名称或者IP地址 FILE="/path/to/local/file" DEST_DIR="/destination/path/on/remote/machines" for HOST in "${HOSTS[@]}"; do scp -r ${FILE} user@${HOST}:${DEST_DIR} done ``` 这段代码实现了遍历预设好的主机数组,并利用SCP协议将本地指定路径下的文件复制到每一台远程计算机上的相应位置。 #### 使用Expect实现无交互式的SSH密钥部署 对于首次连接新节点时遇到的公钥认证问题,可以借助于`expect`工具来自动生成应答流程,从而避免手动输入确认信息。下面是一个简单的例子说明怎样使用它来进行SSH密钥拷贝: ```bash #!/usr/bin/expect -f set ipaddress [lindex $argv 0] set passwd [lindex $argv 1] spawn ssh-copy-id root@$ipaddress expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$passwd\r" } } ``` 上述片段展示了如何设置环境变量存储待访问设备的信息(如IP地址和密码),并通过调用`ssh-copy-id`命令配合`expect`指令集模拟用户的键盘响应过程[^3]。 #### 利用SFTP进行安全的数据传输 如果希望采用更加稳定可靠的传输机制,则可以选择基于SFTP的服务接口。下面给出了一种方法论指导,即先上传私钥至远端用户目录下.ssh子文件夹中作为临时身份验证手段;之后再实施具体的文件转移动作: ```bash sftp remote_user@remote_host <<EOF put ~/.ssh/id_dsa.pub .ssh/ mkdir -p ~/target_directory put local_file_path target_directory/ bye EOF ``` 此处运用到了Here Document语法结构(`<<`)向`sftp`会话传递一系列命令序列,直至结束标记为止。这种方式不仅简化了编程逻辑而且提高了程序易读性和维护便利度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值