在 bash 脚本中插入包含“$”的变量

2023-12-20

我正在编写一个创建用户帐户的 bash 脚本。用户名和密码哈希值是根据特定标准从文件中提取的。密码哈希自然包含分隔哈希字段的“$”(例如,$1${SALT}$...)。

问题是 -p 选项useradd需要用单引号将密码哈希括起来,以防止“$”字段作为变量进行插值。传递变量时,为了正确插入它,引号需要是双引号。单引号将变量视为字符串。

但是,如果我用双引号传递变量,则该变量将被扩展,然后每个“$”将被视为变量,这意味着密码永远不会正确设置。更糟糕的是,某些变量中带有大括号(“{”或“}”),这使事情变得更加糟糕。

如何传递这样的值并确保它完全插值并且不被 shell 修改?

所有插值变量都完好无损的特定代码行的示例:

# Determine the customer we are dealing with by extracting the acryonym from the FQDN
CUSTACRO=$(${GREP} "HOST" ${NETCONF} | ${AWK} -F "." '{print $2}')

# Convert Customer acronym to all caps
UCUSTACRO=$(${ECHO} ${CUSTACRO} | ${TR} [:lower:] [:upper:])

# Pull the custadmin account and password string from the cust_admins.txt file
PASSSTRING=$(${GREP} ${CUSTACRO} ${SRCDIR}/cust_admins.txt)

# Split the $PASSSTRING into the custadmin and corresponding password
CUSTADMIN=$(${ECHO} ${PASSSTRING} | ${CUT} -d'=' -f1)
PASS=$(${ECHO} ${PASSSTRING} | ${CUT} -d'=' -f2)

# Create the custadmin account
${USERADD} -u 20000 -c "${UCUSTACRO} Delivery Admin" -p "${PASS}" -G custadmins ${CUSTADMIN}

编辑:扩展代码以获得更多上下文。


当您assign to $PASS。双引号不会递归扩展变量。

Observe:

$ foo=hello
$ bar=world
$ single='$foo$bar'
$ double="$foo$bar"
$ echo "$single"
$foo$bar
$ echo "$double"
helloworld

引号仅影响 shell 解析文字字符串的方式。 shell 唯一一次查看变量“内部”是当您根本不使用任何引号时,即使这样,它也只进行分词和通配符扩展。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 bash 脚本中插入包含“$”的变量 的相关文章

  • 变量值更改时的 PyQt 事件

    我有一个变量 t t 0 我想在 t 值发生变化时启动一个事件 如何 没有 valuechanged connect 属性或任何变量 对于全局变量 单独使用赋值是不可能的 但对于属性来说非常简单 只需使用property https doc
  • 规范化 solaris 上的路径名

    在 GNU 系统上我只会使用readlink f SOME PATH 但 Solaris 没有 readlink 我更喜欢在 bash 中运行良好的程序 但如果需要的话其他程序也可以 Edit 到目前为止 我想到的最好的方法是使用 cd 和
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 如何显示 zsh 函数定义(如 bash“type myfunc”)?

    如何在 zsh 中显示函数的定义 type foo没有给出定义 在bash中 bash function foo echo hello bash foo hello bash type foo foo is a function foo e
  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 在 Swift 中将动态 Int 变量从一个类传递到另一个类

    我是 swift 2 的新手 我陷入了将变量从一个类传递到另一个类的过程中 我有一个类 GameScene 我有一个公共变量score并且在更新功能中不断更新 我想发送score两个节点相互碰撞时的值 一旦它发生碰撞 我就会使用 mainv
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 如何在递归调用函数时阻止 bash 创建子 shell

    这是一个计算阶乘的简单 shell 函数 bin bash function factorial if 1 lt 2 then echo 1 else echo 1 factorial 1 1 fi factorial 1 但我发现这个脚本
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • bash 中 :-(冒号破折号)的用法

    bash中这种风格的含义是什么 PUBLIC INTERFACE eth0 目的是什么 If PUBLIC INTERFACE存在且不为null 则返回其值 否则返回 eth0 实际上有一些记录在bash 手册页 http linux di
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的

随机推荐

  • 如何从 C# 将 SQL Server 数据库转换/导出到 MSAccess

    我有一个 SQL Server 数据库 我需要将所有数据导出到用户可以下载的 Access mdb 中 从 C 执行此操作的最简单方法是什么 我意识到我可以有一个空白 但有架构 mdb 当我想导出时我可以复制它 然后通过数据集将所有数据从
  • 是否“int size = 10;”产生一个常量表达式?

    以下代码在 gcc 4 8 和 Clang 3 2 下编译 int main int size 10 int arr size C 标准的8 3 4 1规定数组的大小必须是整型常量表达式 即size似乎不是 这是两个编译器中的错误 还是我遗
  • 在输入助手中调用 ember 把手助手

    我无法找出在 Ember 输入帮助程序中调用 Ember Handlebars registerBoundHelper 的正确方法 BoundHelper 进行日期格式化 Ember Handlebars registerBoundHelp
  • 使 JLabel 淡出

    我正在编写一个应用程序 该应用程序执行某些任务并在成功完成任务时通知用户 为了通知用户我正在使用 jlabel 我希望这个 jlabel 显示消息并在一段时间后消失 我使用 netbeans 作为我的 IDE 这是我的课程的架构 摘要 GU
  • Emacs 中注释缩进错误

    在许多语言中 行注释以单个符号开头 例如 Python 和 R 中的 我发现在 Emacs 中 当编写这样的行注释时 我必须重复注释符号两次才能做出正确的缩进 请参见以下示例 setq x select enable clipboard t
  • 单选按钮的 OnChange 事件处理程序 (INPUT type="radio") 不能作为一个值工作

    我正在为此寻找通用的解决方案 考虑 2 个同名的无线电类型输入 提交后 检查的值决定随表单发送的值
  • Drupal 8:如何自定义表单小部件以显示实体字段值而不是实体标题?

    我正在通过开发自定义表单小部件模块来迈出了解 Drupal 8 在幕后如何工作的第一步 我的目标是显示引用节点的图像字段值 而不是单选按钮列表中的节点标题 在核心中可用 这将允许网站管理员在为节点选择背景图像时选择图片而不是文本 以下是我的
  • 你能让div中的浮动元素不换行吗?

    目标浏览器为IE8 我有一个 div 其中包含向左浮动的元素列表 元素宽度可以在运行时改变 我想做的是 如果它们不再适合 div 它就会被切断并且不会换行 它似乎只有在该项目本身位于一行时才有效 此页面演示了该问题 文本输入的宽度需要在运行
  • VSCode“无法打开file.cs:找不到文件”

    我通过重命名文件夹或其他内容破坏了我的 vscode 项目 不完全确定发生了什么 问题是 虽然我仍然可以构建和运行没有问题 但有些东西已经搞砸了 因此当我收到编译错误时 例如当我双击它说的消息时 无法打开 XXXController cs
  • 更新 edittext 时会发生什么事件?

    我有一个 android 布局 其中有两个编辑文本 一个用于数量 一个用于费率 一个文本视图用于总量 现在我想做的是每当用户更改费率或数量字段时更改 更新总金额 我正在寻找的 edittext 事件是什么 我可以像设置 OnClick 一样
  • 如何分割这个字符串?

    我想分割这个字符串 String info 0 542008835 meters height from ground 由此我只想得到两位小数0 54 通过使用这个我得到了 String new rhs split lt G 但我在这里面临
  • 如何通过仅更改域名而保留其他 URL 参数来重定向 URL

    我现在正在将我的网站迁移到新的主机和域 我想知道是否可以将输入旧网站的任何 URL 的任何人重定向到新网站 同时保留所有 URL 参数 例如 当有人输入这个网址时http www domainA com blog p 667 我希望他被重定
  • 如何在 ruby​​ 中使用 AES 256 ECB PKCS5Padding 加密数据

    我想使用 PKCS5padding 以 AES 256 位 ECB 模式加密数据 我的ruby方法如下 这里如何使用PKCS5Padding def encrypt raw data key cipher OpenSSL Cipher AE
  • 更新行而不是创建新条目数据库android

    我一直在研究 Android 食谱书中的食谱 以利用数据库来存储事件 当前代码允许我添加新条目 但无法修改任何添加的条目 我需要的是一个具有预定义行数 48 的数据库 并且具有通过相应的编辑文本字段更新这些行的功能 任何人都可以帮我修改以下
  • Karma 和 React,有导致错误的警告

    我在用Karma http karma runner github io 0 8 index html with mocha http mochajs org 测试我的React https facebook github io react
  • .NET 日期时间到 SqlDateTime 转换

    在将 NET DateTime 默认情况下 DateTime 转换为 SqlDateTime 时 我应该始终检查 NET 日期是否在 SqlDateTime MinValue 和 SqlDateTime MaxValue 之间 或者 有没有
  • Ruby rspec 命令不起作用,可能是因为 Ubuntu 12 是 64 位吗?

    我在这个问题上曾经很头疼过 我目前正在做一项作业 要求我在 ruby 上使用 rspec 每当我运行 rspec 命令时 我都会收到类似错误 home rvm gems ruby 1 9 3 p286 gems rspec core 2 1
  • 如何替换 MySQL 中的正则表达式模式

    我有一张桌子叫myTable其中有一个名为col1 此列包含以下格式的数据 1 或 2 位数字 连字符 8 位数字 我想替换此列中的所有数据 并将连字符之前的所有内容替换为 4 所以这是一个示例 old values New Values
  • 在 64 位机器上很长[重复]

    这个问题在这里已经有答案了 64位机器上是long 128位吗 Edit 重复问题 看x64 上的 sizeof int https stackoverflow com questions 651956 sizeofint on x64 在
  • 在 bash 脚本中插入包含“$”的变量

    我正在编写一个创建用户帐户的 bash 脚本 用户名和密码哈希值是根据特定标准从文件中提取的 密码哈希自然包含分隔哈希字段的 例如 1 SALT 问题是 p 选项useradd需要用单引号将密码哈希括起来 以防止 字段作为变量进行插值 传递