linux shell操作- 03 用户切换及shell案例

文章目录

  • 用户切换
  • shell 脚本案例

用户切换

  • linux是多用户的、多进程的操作系统,通常多个用户之间需要来回切换;
  • su,switch user 命令
    • 参数 - , 切换用户,同时切换工作目录(为目标用户的家目录)
    • 参数 -c cmd,切换到目标用户,执行一条指令,然后切回原用户;
    • 参数 -m -p ,保持原用户的环境变量;
    • 参数 -l,重新登录该用户;
    • 参数 user,需要切换的用户
    • 命令案例
# 切换到 jack 用户
su jack  # 不切工作路径
su - jack # 切换工作路径和环境变量

# lauf 用户下 切到root(同时切工作路径)  执行pwd, 然后切回lauf
su -c pwd - root
# 需要输入root密码
 

 

shell 脚本案例

  1. root用户下,执行一段shell脚本,中间切换到lauf用户,在lauf用户家目录下 继续创建data1、data2数据目录。
#!/bin/bash 
# user root

# 创建目录的函数
function lauf_make_dir(){
	# $@ 所有的参数 组成数组
	for i in $@;do
		# 目录不存在时 创建
		[[ ! -e $i ]] && mkdir $i
	done
	[ $? -eq 0 ] && return 0
	return 1
}

# root config  python PATH
cat /etc/profile | grep -iE "/usr/local/python3/bin"
# 上一条指令没有成功,则执行
[ $? -ne 0 ] && echo 'export PATH=/usr/local/python3/bin:$PATH' >> /etc/profile && \  # 宏延续 运算符
source /etc/profile # 配置文件生效

# 用户不存在时,创建用户
cat /etc/passwd | grep -iE "\blauf\b" # 单词边界
[ $? -ne 0 ] && useradd lauf -d /home/lauf -m -g root -s /bin/bash

# 切换 用户,并继续执行指令
su - lauf <<EOF
# lauf用户下继续执行
# array
# arr=("data1" "data2")
# lauf_make_dir ${arr[*]}   # 传入数组的值  函数在lauf下找不到

mkdir data1  # CentOS 生效  OpenSuse生效
mkdir data2
EOF              # 执行结束 CentOS 自动切回root用户
				# OpenSuse 不会自动切回root用户


# 后面的代码Cent (root下执行的指令)
ls -la ./ 

root用户下执行shell脚本总结:

  • su - lauf <

    • CentOS 下 lauf 用户执行指令到EOF结束,并自动切回root用户,继续执行剩下的shell指令;
    • OpenSuse下lauf用户执行结束,不会自动切回root用户,剩下 的shell指令不会执行;
  • sudo -iu lauf bash << EOF 切换用户,并继续执行指令

    • CentOS 下lauf用户执行结束,同样自动切回root;
    • OpenSuse 同样切回root;
    • -u 切换普通用户;-i 切换路径,同时使用之前的环境变量;
    • sudo 是权限受限的su ,需要在/etc/sudoers文件中为用户配置权限;
    • sudo chmod u+x test.sh 执行流程–>切到root用户执行该指令,执行结束切回普通用户;
  • su - jack -c cmd ; 切换到jack 执行一条执行(jack 具有权限),切回原用户;

  • sudo -iu jack bash -c cmd; 执行一条指令,然后切回原用户;

 
 
上一篇: linux shell操作- 02 常用命令及案例

你可能感兴趣的:(linux,linux,运维,shell脚本)