本文介绍: 这是因为whoami命令是根据当前进程的有效用户ID来确定当前用户身份的,而在切换用户后,当前进程的有效用户ID并没有改变,仍然是切换前的用户ID。其中,username需要切换到的用户,/path/to/script.sh脚本文件路径functionName为需要执行函数名,parameter1和parameter2为函数需要传递的参数。如果需要执行多个命令可以使用expectsend命令来发送命令,并使用expectexpect命令来等待命令执行完成。

shell脚本切换用户之后再执行多个函数以及执行多行命令的方法

切换用户之后执行多个函数以及执行多行命令

#!/bin/bash

# 切换用户
su - username &lt;<EOF
# 执行多行命令
function1() {
  # 函数体
}

function2() {
  # 函数体
}

function1
function2
EOF

其中,username是您要切换到的用户的用户名function1和function2是您要执行的函数名称,您可以根据需要添加更多函数和命令。在EOF标记之间的所有内容都将作为切换后的用户执行。请注意,您需要确保切换后的用户具有执行所需命令和函数的权限

在脚本中切换用户后,执行脚本中的一行命令:

su - username -c "command"

其中,username为要切换到的用户,command为要执行的命令。在执行该命令时,会切换到指定用户,并以该用户的身份执行命令。

# 切换为普通用户
sudo -u 普通用户名称 bash << EOF

# 在普通用户下执行的命令
echo "Hello, World!"

EOF

其中,普通用户名称需要替换为实际的普通用户名称。在脚本中使用sudo -u命令可以切换到指定的用户下执行命令,<< EOF和EOF之间的代码块是在普通用户下执行的命令。执行完普通用户下的命令后,脚本会自动切换回root用户,继续执行后续的命令。

在脚本中切换用户之后,执行脚本中的函数

例如,在Linux系统中,可以使用以下代码切换用户并执行脚本中的函数:

sudo -u username bash -c "source /path/to/script.sh &amp;&amp; functionName parameter1 parameter2"

其中,username为需要切换到的用户,/path/to/script.sh为脚本文件的路径,functionName为需要执行的函数名,parameter1和parameter2为函数需要传递的参数

su - $1 bash -c "source /usr/local/shell_01/ssh_.sh &amp;&amp; create_keygen $1"

其中su表示切换用户,
$1表示第一个参数
bashc表示执行后面的命令,
source /usr/local/shell_01/ssh_.sh表示执行该脚本文件,
&amp;&amp;表示前面的命令执行成功后才执行后面的命令,
create_keygen $1表示执行create_keygen函数并传入第一个参数

在脚本中切换用户后,执行脚本中的函数需要注意以下几点:

  1. 确认切换用户的方式:根据脚本中切换用户的方式选择相应的命令或函数进行切换。例如,如果是使用sudo命令切换用户,则可以使用exec()函数执行sudo命令。

  2. 确认切换后的用户权限:切换用户后,需要确认当前用户的权限是否足够执行脚本中的函数。如果权限不足,则需要使用su命令切换到更高权限的用户。

  3. 执行脚本中的函数:切换用户后,可以直接调用脚本中的函数进行执行。如果函数需要传递参数,则需要在调用函数时传递相应的参数

shell脚本中切换用户之后为什么脚本不继续运行

shell脚本中切换用户后,脚本会在切换后的用户环境中继续执行,如果该用户没有执行脚本的权限或者脚本所需的环境变量不在该用户的环境中,脚本就会停止运行

为了让切换用户后的脚本能正常继续运行可以使用sudo命令来切换用户,并使用-i选项来保持原来的环境变量。例如:

sudo -i -u otheruser
# 切换到otheruser用户,并保持原来的环境变量

# 在这里执行需要切换用户后才能执行的命令

exit
# 切换回原来的用户

这样,脚本就可以在切换用户后继续执行,并且可以使用原来用户的环境变量。

su的参数

参考博客
inux su命令:su命令语法、su root与su – root区别、su与sudo区别、su -c 参数的使用理解

注意:su命令有

– l 或 —login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
也就是 以目标用户的环境变量执行命令
-c command 或 —command=command 变更为帐号为 USER 的使用者并执行指令command)后再变回原来使用者

下面是一个使用su -c命令的示例假设当前用户为user1,要以root用户的身份执行ls命令:

su -c "ls /root" root

其中,-c参数后面跟着要执行的命令ls /root,root为要切换到的用户。执行该命令后,会要求输入root用户的密码输入正确即可执行ls命令。

shell脚本中写代码检查当前用户是否为root用户,如果是则切换为普通用户,如果不是就切换为root并且输入密码

#!/bin/bash

if [ $(id -u) -eq 0 ]; then
    echo "当前用户为root用户,将切换为普通用户"
    su - 普通用户
else
    echo "当前用户不是root用户,将切换为root用户"
    su -c "echo '请输入root用户密码:'; su - root" 普通用户
fi

其中,id -u命令可以获取当前用户的UID,如果等于0,则表示当前用户为root用户。如果是root用户,则使用su – 普通用户命令切换为普通用户;如果不是root用户,则使用su -c命令切换为root用户,并提示输入密码。其中,-c选项可以让su命令执行指定的命令,echo ‘请输入root用户密码:’用于提示用户输入密码。

在Linux中,root用户的UID默认一直是0。普通用户的UID则是由系统管理员创建用户时分配的,通常从1000开始递增。不过,这个UID的范围可以通过修改系统配置文件来改变。一般来说,普通用户的UID应该是大于等于1000的整数,以避免与系统用户的UID冲突

linux中su和su – 有什么区别

在Linux中,su和su – 都是用于切换用户的命令,但它们之间有一些区别
su命令用于切换到另一个用户,但不改变当前的工作目录和环境变量。如果没有指定要切换到的用户,则默认切换到root用户。使用su命令时,需要输入目标用户的密码才能切换到该用户。
su – 命令也用于切换到另一个用户,但它会改变当前的工作目录和环境变量,使其与目标用户的环境变量一致。使用su -命令时,需要输入目标用户的密码才能切换到该用户。
因此,su – 命令更适合在切换到另一个用户后执行需要目标用户环境变量的操作,例如在目标用户的家目录下执行脚本或命令。而su命令则更适合在不需要目标用户环境变量的情况下切换到另一个用户。

// 变更帐号为 clsung 并改变工作目录至 clsung 的家目录(home dir)
su - clsung

shell脚本中在expect中如何执行多个命令

shell脚本中,可以使用expect命令来实现自动化交互式命令行操作。如果需要执行多个命令,可以使用expect的send命令来发送命令,并使用expect的expect命令来等待命令执行完成。

以下是一个示例脚本,其中包含两个命令:

#!/usr/bin/expect

# 连接远程主机
spawn ssh user@host

# 等待输入密码
expect "password:"

# 发送密码
send "mypasswordr"

# 等待命令提示符
expect "$ "

# 执行命令
send "ls -lr"

# 等待命令执行完成
expect "$ "

# 执行另一个命令
send "echo 'Hello, world!'r"

# 等待命令执行完成
expect "$ "

# 退出交互式会话
send "exitr"
expect eof

在上面的脚本中,使用spawn命令连接远程主机,并使用expect命令等待输入密码。然后使用send命令发送密码,并使用expect命令等待命令提示符。接着使用send命令发送第一个命令,并使用expect命令等待命令执行完成。然后再使用send命令发送第二个命令,并使用expect命令等待命令执行完成。最后使用send命令退出交互式会话

shell脚本中,可以使用以下几种方法查看当前的用户

  1. 使用whoami命令
#!/bin/bash
echo "当前用户是:$(whoami)"
  1. 使用id命令
#!/bin/bash
echo "当前用户是:$(id -un)"
  1. 使用$USER环境变量
#!/bin/bash
echo "当前用户是:$USER"

以上三种方法都可以用来查看当前的用户,其中whoami和id命令会返回当前用户的用户名,而$USER环境变量则直接存储了当前用户的用户名。在实际使用中,可以根据具体情况选择使用哪种方法。

linux目录权限修改为drwxr-xr-x

可以使用chmod命令来修改Linux目录权限,具体命令如下:

chmod 755 /path/to/directory

其中,755表示目录权限为drwxr-xr-x,其中d表示目录,r表示读权限,w表示写权限,x表示执行权限。具体含义如下:

  • 第一位:d表示目录,-表示文件
  • 第二至四位:所有者权限,r表示读权限,w表示写权限,x表示执行权限
  • 第五至七位:组用户权限,r表示读权限,w表示写权限,x表示执行权限
  • 第八至十位:其他用户权限,r表示读权限,w表示写权限,x表示执行权限
    因此,755表示目录所有者具有读、写、执行权限,组用户和其他用户具有读、执行权限。

ssh-keygen -t rsa有什么作用

ssh-keygen -t rsa命令用于生成RSA密钥对,包括公钥私钥。在执行该命令时,会提示用户输入密钥文件名称路径,以及密码(可选)。如果在Linux中没有.ssh目录,则执行此命令时,会自动创建该目录。生成密钥对可以用于SSH连接身份验证。具体操作步骤如下:

需要注意的是,私钥文件必须保密,不应该与他人共享公钥文件可以发送给其他人,用于身份验证

ssh-keygen的参数有哪些

ssh-keygen是用于生成管理SSH密钥对的命令行工具。它的常用参数包括:

例如,生成一个2048位的RSA密钥对,并将公钥保存文件id_rsa.pub中,私钥保存文件id_rsa中,可以使用以下命令:

ssh-keygen -t rsa -b 2048 -f id_rsa

生成密钥对的过程中,可以根据需要设置注释和密码等选项生成的密钥对可以用于SSH连接、Git代码仓库场景

shell中的spawn命令

在shell中,spawn命令用于创建一个新的进程并执行指定的命令。它通常用于在后台执行长时间运行任务,以避免阻塞当前进程。spawn命令可以接受多个参数,其中第一个参数是要执行的命令,后面的参数是传递给该命令的参数。spawn命令还可以指定标准输入、输出错误流的重定向,以及设置环境变量。在执行完命令后,spawn命令会返回一个进程ID,可以使用该ID来监视和控制该进程的行为

shell中的expect命令

在shell中,expect命令是一种自动化交互式应用程序工具。它可以模拟用户的交互行为,例如输入密码、选择选项等等。expect命令通常用于自动化测试自动化部署自动配置场景

expect命令的基本语法如下:

expect [-d] [-c cmds] [-f scriptfile] [-i in] [-o out] [-p prompt] [-u user] [args]

其中,常用的参数包括:

  • -c:指定命令行中的expect脚本;
  • -f:指定expect脚本文件;
  • -i:指定输入流;
  • -o:指定输出流;
  • -p:指定提示符;
  • -u:指定用户名

expect脚本通常由一系列expect和send命令组成。expect命令用于匹配输出流中的某个字符串,send命令用于向输入流中发送个字符串。例如,下面是一个简单的expect脚本:

#!/usr/bin/expect

set timeout 10
spawn ssh user@host
expect "password:"
send "mypasswordr"
expect "$ "
send "ls -lr"
expect "$ "
send "exitr"

这个脚本的作用是通过ssh登录远程主机,执行ls -l命令,然后退出。在这个脚本中,expect命令用于匹配“password:“和”$ “这两个提示符,send命令用于向输入流中发送密码和命令。

总之,expect命令是一种非常强大的自动工具,可以大大提高工作效率。但是,需要注意的是,expect脚本的编写需要一定的技巧和经验,否则可能会出现意想不到的问题

在shell脚本中设置了切换用户后执行whoami命令,为什么whoami命令显示用户是之前为切换时的用户

在shell脚本中切换用户后执行whoami命令,可能会出现whoami命令显示用户是之前为切换时的用户的情况。这是因为whoami命令是根据当前进程的有效用户ID来确定当前用户的身份的,而在切换用户后,当前进程的有效用户ID并没有改变,仍然是切换前的用户ID。因此,为了正确获取切换后的用户身份,可以使用su命令来切换用户,并在su命令后面加上-c参数来执行需要执行的命令,例如:

su -c "whoami" - username

其中,-表示使用当前用户的环境变量,-c表示执行后面的命令,username表示需要切换到的用户。这样就可以正确获取切换后的用户身份了。

原文地址:https://blog.csdn.net/weixin_44505901/article/details/130567680

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10567.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注