简单脚本疑问求助--用户的表示方法

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
九天星
帖子: 1441
注册时间: 2007-07-14 20:45

简单脚本疑问求助--用户的表示方法

#1

帖子 九天星 » 2016-09-06 13:22

代码: 全选

#!/bin/sh
echo "安装WIN字体"
sudo mkdir /usr/share/fonts/winfonts
sudo cp /home/123456/文档/fonts/* /usr/share/fonts/winfonts/
sudo chmod 644 /usr/share/fonts/winfonts/*
cd /usr/share/fonts/winfonts/
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv
上例是我个人安装部份WIN字体的一个SHELL脚本,请注意第4行的123456,是我的用户名,这意味着我每次要运行这个脚本,我的用户名都必须是123456,否则复制就会报错。我记得在WINDOWS下表示用户名的变量是%USER%,问题:在SHELL脚本中表示用户名的变量是什么?#意思就是不管我的用户名变成什么样,这段脚本不用修改都有效。
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 简单脚本疑问求助--用户的表示方法

#2

帖子 vickycq » 2016-09-06 13:25

代码: 全选

$USER
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
头像
九天星
帖子: 1441
注册时间: 2007-07-14 20:45

Re: 简单脚本疑问求助--用户的表示方法

#4

帖子 九天星 » 2016-09-06 16:07

科学之子 写了:通过2楼学了个变量
不过楼主的需求貌似

代码: 全选

$HOME
更合适吧?

$home是什么意思哦!?
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 简单脚本疑问求助--用户的表示方法

#5

帖子 vickycq » 2016-09-06 16:09

科学之子 写了:$HOME 更合适吧?
一时糊涂了 :em23 仅获取当前用户名可用以下任一:

代码: 全选

$USER
`whoami`
`id -u -n`
在脚本中使用时,需注意不要用 sudo 运行脚本,即不要 sudo msfont.sh
因需保证运行脚本的 shell 使用用户身份运行,使上述变量得以正确展开。
九天星 写了:$home是什么意思哦!?

代码: 全选

$ echo $HOME
/home/keith

$ sudo echo $HOME
/home/keith

$ sudo bash -c "echo $HOME"
/home/keith

$ sudo bash -c 'echo $HOME'
/root
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 简单脚本疑问求助--用户的表示方法

#6

帖子 科学之子 » 2016-09-06 17:27

九天星 写了:
科学之子 写了:通过2楼学了个变量
不过楼主的需求貌似

代码: 全选

$HOME
更合适吧?

$home是什么意思哦!?
$HOME 是HOME目录,即你要存东西的那个目录
用它代表更省事,不然非用户名部分发生变更还是要折腾,$HOME更加自动化
还有注意区分大小写
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

Re: 简单脚本疑问求助--用户的表示方法

#7

帖子 科学之子 » 2016-09-06 17:30

vickycq 写了:
科学之子 写了:$HOME 更合适吧?
一时糊涂了 :em23 仅获取当前用户名可用以下任一:

代码: 全选

$USER
`whoami`
`id -u -n`
在脚本中使用时,需注意不要用 sudo 运行脚本,即不要 sudo msfont.sh
因需保证运行脚本的 shell 使用用户身份运行,使上述变量得以正确展开。
九天星 写了:$home是什么意思哦!?

代码: 全选

$ echo $HOME
/home/keith

$ sudo echo $HOME
/home/keith

$ sudo bash -c "echo $HOME"
/home/keith

$ sudo bash -c 'echo $HOME'
/root
为什么同样是sudo权限,$HOME目录不一样?
头像
vickycq
帖子: 4507
注册时间: 2011-03-20 13:12
系统: Debian
来自: 山东省寿光县
联系:

Re: 简单脚本疑问求助--用户的表示方法

#8

帖子 vickycq » 2016-09-06 18:56

科学之子 写了: $ echo $HOME
/home/keith

$ sudo echo $HOME
/home/keith

$ sudo bash -c "echo $HOME"
/home/keith

$ sudo bash -c 'echo $HOME'
/root

为什么同样是sudo权限,$HOME目录不一样?
第二个 - $HOME 由当前 shell 展开后再传给 sudo
bash(0) 展开 $HOME - 生成子进程(1) sudo echo /home/keith - 生成子进程(2) echo /home/keith
子进程(1)、子进程(2)身份均为 root,但执行展开变量的进程 bash(0) 身份为 keith

第三个 - 由于使用了双引号,$HOME 仍由当前 shell 展开
第四个 - 由于使用了单引号,$HOME 未由当前 shell 展开
参考 https://www.gnu.org/software/bash/manua ... uotes.html
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户
回复