我有一个非常简单的脚本,如下所示:
#!/bin/bash
VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'
echo $MOREF
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行此脚本并将参数传递给它时,我没有得到任何输出.但是,当我运行$MOREF
变量中包含的命令时,我能够获得输出.
我想知道如何获取需要在脚本中运行的命令的结果,将其保存到变量,然后在屏幕上输出该变量?
要将命令的输出存储为sh/ksh/bash中的变量,您可以执行任一操作
var=$(command)
Run Code Online (Sandbox Code Playgroud)
要么
var=`command`
Run Code Online (Sandbox Code Playgroud)
两种方法之间有什么区别?
我有一个站点作为远程Git repo从Bitbucket.com使用SSH别名拉.我可以在我的服务器上手动启动ssh-agent,但每次通过SSH登录时都必须这样做.
我手动启动ssh-agent:
eval ssh-agent $SHELL
Run Code Online (Sandbox Code Playgroud)
然后我添加代理:
ssh-add ~/.ssh/bitbucket_id
Run Code Online (Sandbox Code Playgroud)
然后它出现在我做的时候:
ssh-add -l
Run Code Online (Sandbox Code Playgroud)
我很高兴去.有没有办法自动化这个过程,所以我不必每次登录都这样做?服务器正在运行RedHat 6.2(Santiago).
我需要从远程仓库中删除旧的和未维护的分支.我正试图找到一种方法来列出他们上次修改日期的远程分支,但我不能.
有人知道以这种方式列出远程分支的简单方法吗?
我只是想了解shell中的以下代码行.它用于获取当前工作目录.我知道$(variable)
名称返回变量名称中的值,但$(command)
应该返回什么?它在执行命令后返回值吗?在这种情况下,我们可以`
用来执行命令.
CWD="$(cd "$(dirname $0)"; pwd)"
Run Code Online (Sandbox Code Playgroud)
在不同版本的shell中也可以从以下代码行获取相同的输出
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)
我无法理解的含义$(cd..
和$(dirname
.
有人可以帮我弄清楚这个命令是如何执行的吗?
我想编写一个脚本,该脚本将继续检查网络中的任何设备是否应该全天在线.我试过用ping,但是
if [ "`ping -c 1 some_ip_here`" ]
then
echo 1
else
echo 0
fi
Run Code Online (Sandbox Code Playgroud)
给人1
如果我输入有效或无效的IP地址不管.如何检查特定地址(或更好的IP地址列表中的任何设备)是否脱机?
当我去回答这个问题时,我打算使用这个${}
符号,因为我在这里已经看过很多次,所以最好用反引号.
但是,当我尝试
joulesFinal=${echo $joules2 \* $cpu | bc}
Run Code Online (Sandbox Code Playgroud)
我收到了消息
-bash: ${echo $joules * $cpu | bc}: bad substitution
Run Code Online (Sandbox Code Playgroud)
但
joulesFinal=`echo $joules2 \* $cpu | bc`
Run Code Online (Sandbox Code Playgroud)
工作良好.那么我需要做出哪些其他改变呢?
我正在尝试将git哈希值设置为环境变量,我认为这样做很简单:
git log --oneline -1 | export GIT_HASH=$1
Run Code Online (Sandbox Code Playgroud)
但是$1
不包含任何东西.我究竟做错了什么?
我尝试创建一个可以中断脚本执行的函数(由于致命错误):
quit() {
echo -e "[ERROR]" | log
exit 1
}
Run Code Online (Sandbox Code Playgroud)
调用示例:
if [ "$#" -eq 1 ]; then
# Do stuff
else
echo -e "function getValue: wrong parameters" | log
quit
fi
Run Code Online (Sandbox Code Playgroud)
函数quit
被调用(在日志文件中回显)但脚本继续运行。我读过exit
只终止子shell(这是真的吗?)这意味着它终止了quit
函数而不是整个脚本。
目前,我不喜欢在quit
方法中使用返回码,因为它意味着很多代码重构。
有没有办法从quit
函数中停止脚本?
编辑: 出现错误的情况的完整示例:
#!/bin/bash
logfile="./testQuit_log"
quit() {
echo "quit" | log
exit 1
}
log() {
read data
echo -e "$data" | tee -a "$logfile"
}
foo() {
if [ "$#" -ne 1 ]; then …
Run Code Online (Sandbox Code Playgroud) 我直接通过SSH传递以下命令:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /key/path server@111.111.111.111 'bash -s' << EOF
FPM_EXISTS=`ps aux | grep php-fpm`
if [ ! -z "$FPM_EXISTS" ]
then
echo "" | sudo -S service php5-fpm reload
fi
EOF
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[2015-02-25 22:45:23] local.INFO: bash: line 1: syntax error near unexpected token `('
bash: line 1: ` FPM_EXISTS=root 2378 0.0 0.9 342792 18692 ? Ss 17:41 0:04 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
Run Code Online (Sandbox Code Playgroud)
这就像它试图执行输出ps aux | grep php-fpm
而不是仅仅捕获git变量.因此,如果我更改命令以尝试捕获ls
,它就像尝试执行它一样,当然返回每个目录的"command not found".
如果我只是将Bash脚本的内容粘贴到文件中并运行它就可以正常工作; 但是,我似乎无法弄清楚如何通过SSH传递它.
有任何想法吗?
我是Perl的一个菜鸟,不知道这个脚本有什么问题:
#!/bin/sh
randAnPass=true;
if [ $randAnPass = true ]
then
pass=perl /root/bin/randpass
else
# prompt for setting user's password ..
echo -n "pick password for '${user}': "
read pass
fi
#echo $randAnPass;
echo "Generated pass = $pass";
Run Code Online (Sandbox Code Playgroud)
出于某种原因,它输出:
r4Nd0mP
Generated pass =
Run Code Online (Sandbox Code Playgroud)
我希望它输出
Generated pass = r4Nd0mP
Run Code Online (Sandbox Code Playgroud) 我正在尝试执行以下命令:
`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg`
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误
-bash: ###############################################################################: command not found
Run Code Online (Sandbox Code Playgroud)
如果我尝试在没有后退滴答的情况下运行它,该命令将起作用.
我尝试过以下方法:
`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg` 2>&1
`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg`> /dev/null
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我怎样才能一步而不是两个阶段创建一个数组,如下所示?下面的示例是在实时 Linux 系统上执行的。
POSITION=`volt |grep ate |awk '{print $4}'` #returns three integers
declare -a POSITION_ARRAY=($POSITION) #create an array
Run Code Online (Sandbox Code Playgroud) bash ×9
shell ×6
sh ×3
git ×2
ksh ×2
ssh ×2
bitbucket ×1
branch ×1
command-line ×1
connectivity ×1
linux ×1
maintenance ×1
networking ×1
perl ×1
ping ×1
redhat ×1
scripting ×1
sed ×1
ssh-agent ×1
terminal ×1