我正在编写一个调用另一个脚本的非常简单的脚本,我需要将参数从当前脚本传播到我正在执行的脚本.
例如,我的脚本名称是foo.sh和调用bar.sh
foo.sh:
bar $1 $2 $3 $4
Run Code Online (Sandbox Code Playgroud)
如何在不明确指定每个参数的情况下执行此操作?
在Bash中,测试数组是否包含某个值的最简单方法是什么?
编辑:在答案和评论的帮助下,经过一些测试后,我想出了这个:
function contains() {
local n=$#
local value=${!n}
for ((i=1;i < $#;i++)) {
if [ "${!i}" == "${value}" ]; then
echo "y"
return 0
fi
}
echo "n"
return 1
}
A=("one" "two" "three four")
if [ $(contains "${A[@]}" "one") == "y" ]; then
echo "contains one"
fi
if [ $(contains "${A[@]}" "three") == "y" ]; then
echo "contains three"
fi
Run Code Online (Sandbox Code Playgroud)
我不确定它是否是最佳解决方案,但似乎有效.
获取bash脚本的所有给定参数并将它们全部传递到脚本中的另一个命令的最简单方法是什么?例如:
命令行:
./runProgram.sh [ARGS HERE]
Run Code Online (Sandbox Code Playgroud)
脚本:
#! /bin/bash
cd bin/
java com.myserver.Program [ARGS HERE]
Run Code Online (Sandbox Code Playgroud) 在我看来,它们都存储了所有命令行参数.
两者之间有区别吗?
我正在尝试将文件列表存储到一个数组中,然后再次遍历该数组.下面是我ls -ls从控制台运行命令时得到的内容.
total 40
36 -rwxrwxr-x 1 amit amit 36720 2012-03-31 12:19 1.txt
4 -rwxrwxr-x 1 amit amit 1318 2012-03-31 14:49 2.txt
Run Code Online (Sandbox Code Playgroud)
我写的以下bash脚本将上述数据存储到bash数组中.
i=0
ls -ls | while read line
do
array[ $i ]="$line"
(( i++ ))
done
Run Code Online (Sandbox Code Playgroud)
但是当我echo $array,我什么都没得到!
仅供参考,我这样运行脚本: ./bashscript.sh
我想要做的是,作为函数的输入,可以包括引号(单引号或双引号)和与该函数提供的行完全相同的回声.例如:
function doit {
printf "%s " ${@}
eval "${@}"
printf " # [%3d]\n" ${?}
}
Run Code Online (Sandbox Code Playgroud)
其中,给出以下输入
doit VAR=42
doit echo 'single quote $VAR'
doit echo "double quote $VAR"
Run Code Online (Sandbox Code Playgroud)
产量如下:
VAR=42 # [ 0]
echo single quote $VAR # [ 0]
echo double quote 42 # [ 0]
Run Code Online (Sandbox Code Playgroud)
所以变量扩展的语义就像我期望的那样得到保留,但是我无法得到提供给函数的行的确切格式.我想要的是doit echo 'single quote $VAR'结果echo 'single quote $VAR'.
我确信这与bash在传递给函数之前处理参数有关; 我只是想找个方法(如果可能的话).
所以我的目的是影响脚本的执行,同时提供执行的精确副本,可以用作诊断工具,包括每个步骤的退出状态.
虽然我可以通过做类似的事情来获得上述所需的行为
while read line ; do
doit ${line}
done < ${INPUT}
Run Code Online (Sandbox Code Playgroud)
面对控制结构(即等) …
我有一个以前运行的进程(process1.sh),它在后台运行,PID为1111(或其他任意数字).我如何command option1 option2使用1111的PID 发送类似于该过程的内容?
我并不想开始一个新的process1.sh!
下面有4个bash片段.我打电话给他们./script.sh a b c
for arg in $@; do
echo "$arg"
done ## output "a\nb\nc"
for arg in "$@"; do
echo "$arg"
done ## output "a\nb\nc" -- I don't know why
for arg in $*; do
echo "$arg"
done ## output "a\nb\nc"
for arg in "$*"; do
echo "$arg"
done ## output "abc"
Run Code Online (Sandbox Code Playgroud)
我不知道什么是之间准确的区别$@和$*,
我想"$@"和"$*"应该是一样的,但事实并非如此.为什么?
假设我有一个名为foo.sh的bash脚本.
我想这样称呼它
foo.sh Here is a bunch of stuff on the command-line
Run Code Online (Sandbox Code Playgroud)
我希望它将所有文本存储到一个变量中并将其打印出来.
所以我的输出是:
Here is a bunch of stuff on the command-line
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我试图用命令行中的IP地址作为参数执行以下代码; 但我得到一个错误说 - ":第6行:意外令牌`echo'附近的语法错误"
.
#!/bin/sh
echo $1;
declare -a values=$(ssh -q jboss@$1 "ps -eo pcpu,pid,user | sort -r -k1 | less | grep jboss");
for value in ${values[*]} do
echo $value;
done
Run Code Online (Sandbox Code Playgroud)
你能帮我纠正这个错误吗?