在shell脚本中切换用户之后再执行多个函数以及执行多行命令的方法
切换用户之后执行多个函数以及执行多行命令
#!/bin/bash
# 切换用户
su - username <<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 && functionName parameter1 parameter2"
其中,username为需要切换到的用户,/path/to/script.sh为脚本文件的路径,functionName为需要执行的函数名,parameter1和parameter2为函数需要传递的参数。
su - $1 bash -c "source /usr/local/shell_01/ssh_.sh && create_keygen $1"
其中su表示切换用户,
$1表示第一个参数,
bash -c表示执行后面的命令,
source /usr/local/shell_01/ssh_.sh表示执行该脚本文件,
&&表示前面的命令执行成功后才执行后面的命令,
create_keygen $1表示执行create_keygen函数并传入第一个参数。
在脚本中切换用户后,执行脚本中的函数需要注意以下几点:
-
确认切换用户的方式:根据脚本中切换用户的方式,选择相应的命令或函数进行切换。例如,如果是使用sudo命令切换用户,则可以使用exec()函数执行sudo命令。
-
确认切换后的用户权限:切换用户后,需要确认当前用户的权限是否足够执行脚本中的函数。如果权限不足,则需要使用su命令切换到更高权限的用户。
-
执行脚本中的函数:切换用户后,可以直接调用脚本中的函数进行执行。如果函数需要传递参数,则需要在调用函数时传递相应的参数。
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 "mypassword\r"
# 等待命令提示符
expect "$ "
# 执行命令
send "ls -l\r"
# 等待命令执行完成
expect "$ "
# 执行另一个命令
send "echo 'Hello, world!'\r"
# 等待命令执行完成
expect "$ "
# 退出交互式会话
send "exit\r"
expect eof
在上面的脚本中,使用spawn命令连接到远程主机,并使用expect命令等待输入密码。然后使用send命令发送密码,并使用expect命令等待命令提示符。接着使用send命令发送第一个命令,并使用expect命令等待命令执行完成。然后再使用send命令发送第二个命令,并使用expect命令等待命令执行完成。最后使用send命令退出交互式会话。
在shell脚本中,可以使用以下几种方法来查看当前的用户
- 使用whoami命令
#!/bin/bash
echo "当前用户是:$(whoami)"
- 使用id命令
#!/bin/bash
echo "当前用户是:$(id -un)"
- 使用$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 -t rsa命令。
- 按照提示输入密钥文件的名称和路径,或者直接按Enter键使用默认值。
- 如果需要设置密码,则输入密码并确认。
- 生成密钥对后,可以在.ssh目录下找到id_rsa和id_rsa.pub两个文件,分别为私钥和公钥。
需要注意的是,私钥文件必须保密,不应该与他人共享。公钥文件可以发送给其他人,用于身份验证。
ssh-keygen的参数有哪些
ssh-keygen是用于生成和管理SSH密钥对的命令行工具。它的常用参数包括:
- -t:指定密钥类型,常用的有rsa、dsa、ecdsa和ed25519等。
- -b:指定密钥长度,单位为比特。默认值为2048。
- -C:添加注释,用于标识该密钥的用途。
- -f:指定密钥文件名,可以自定义密钥文件的名称和路径。
- -N:设置密钥的密码,用于保护密钥的安全性。
- -q:静默模式,不输出任何信息。
例如,生成一个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 "mypassword\r"
expect "$ "
send "ls -l\r"
expect "$ "
send "exit\r"
这个脚本的作用是通过ssh登录到远程主机,执行ls -l命令,然后退出。在这个脚本中,expect命令用于匹配"password:“和”$ "这两个提示符,send命令用于向输入流中发送密码和命令。
总之,expect命令是一种非常强大的自动化工具,可以大大提高工作效率。但是,需要注意的是,expect脚本的编写需要一定的技巧和经验,否则可能会出现意想不到的问题。
在shell脚本中设置了切换用户后执行whoami命令,为什么whoami命令显示用户是之前为切换时的用户
在shell脚本中切换用户后执行whoami命令,可能会出现whoami命令显示用户是之前为切换时的用户的情况。这是因为whoami命令是根据当前进程的有效用户ID来确定当前用户的身份的,而在切换用户后,当前进程的有效用户ID并没有改变,仍然是切换前的用户ID。因此,为了正确地获取切换后的用户身份,可以使用su命令来切换用户,并在su命令后面加上-c参数来执行需要执行的命令,例如:文章来源:https://www.toymoban.com/news/detail-442076.html
su -c "whoami" - username
其中,-表示使用当前用户的环境变量,-c表示执行后面的命令,username表示需要切换到的用户。这样就可以正确地获取切换后的用户身份了。文章来源地址https://www.toymoban.com/news/detail-442076.html
到了这里,关于在shell脚本中切换用户之后再执行多个函数以及执行多行命令的方法和遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!