受启发
如果条件是命令替换,而命令不产生输出,则if语句应该做什么?
注意:示例是if $(true); then ...,而不是if true ; then ...
例如,考虑到:
if $(true) ; then echo yes ; else echo no ; fi
我认为应该将$(true)替换为true命令的输出,这是没有意义的。然后,它应相当于以下两种方法之一:
if "" ; then echo yes ; else echo no ; fi
它打印no,因为没有名称为空字符串的命令,或者如下所示:
if ; then echo yes ; else echo
问题
我在bash脚本文件(aaaa.sh)中编写了一些命令行,比如output=$(cmd1|cmd2),并找到了生成的子进程。
文件aaaa.sh中的代码
echo "The name of this file is $(basename $0)."
echo "The pid of this program is $$."
echo -e '\n---- 0 ----'
echo -e 'CMD: ps -ef | grep "aaaa.sh" | grep -v grep'
ps -ef | grep &
如果我们想在批处理脚本的某些地方使用echo off,比如外部循环和echo on内部循环,我们应该如何做到这一点?
如果我试图使用@而不是@echo off.Do,而不是全局使用它,那么我必须在每一行中加上“@”?
这里的代码如下:
@echo off
set select=package:com.google.ar.core
set "str=%select%"
set "string1=%str::=" & set "string2=%"
@echo on
echo %select%
echo %string2%
@ec
今天,我遇到了奇怪的野蛮行为,我做了一个简单的例子:
#!/bin/bash
if true or ! true; then
echo a;
else
echo b;
fi
if true -o ! true; then
echo a;
else
echo b;
fi
if true || ! true; then
echo a;
else
echo b;
fi
if true or
! true; then
echo a;
else
echo b;
fi
if true -o
! true; then
我正在从自动bash安装创建一个bash脚本文件。
该文件应该只通过cd进入git目录,查找新版本,如果有新版本,则拉出最新更改并重新构建。
脚本本身可以工作,文件也会被创建,但在创建时,它会向我显示两次fatal: not a git repository (or any of the parent directories): .git。
create_file.sh
echo "HOME=/home/nknx" > nknupdate
echo "GOPATH=/home/nknx/go" >> nknupdate
echo "P
我通过大量的观看了一门很棒的shell脚本编写课程。现在,我想我对Bourne shell已经相当熟悉了,我决定编写我的第一个shell脚本。
脚本目标:检查git工作目录是否干净。如果是,则将工作目录覆盖到名为deployment的分支。最后,将部署分支推送到源。
我最终得到了这段代码:
#!/bin/sh
######################################################
# Deploys working directory to git deployment branch.
# Requires that the working direct
我正在编写一个批处理脚本,通过ftp将预定义文件夹的每个子文件夹传输到远程服务器。
一切正常,但在for循环中,它只执行一次,只传输一个文件夹,然后中断循环。
我在for循环中有一堆代码
FOR /f "delims= " %%B IN ('DIR "%backup_dir%" /A:D /B') DO (
here is my code
)
当我在for循环中使用一些简短的代码时,比如"echo",它就能正常运行。但当我把一堆代码放入ftp命令时就不是这样了。这些ftp代码可以正确运行,但只运行一次,然后它就会中断循
#!/bin/bash
until ["$userIn" = "j"]
do
echo "Welcome to the Menu_Script Program!"
echo
echo "Menu Options"
echo "Please Select an Option."
echo
echo
echo "Press a to use the E
上的POSIX shell标准
第2.6.3节中说:
Command substitution allows the output of a command to be substituted in place of the command name itself
这似乎意味着,只有当您替换整个命令名时,它才能工作;如果您替换它的一部分或其他内容,则它可能会工作,也可能不会工作。
实验:
$ echo ;
$ $(echo echo) ;
$
到目前为止一切顺利..。
$ e$(echo cho) ;
$ echo $(echo ';')
;
$ echo $(echo
我想写一个bash脚本来打印命令。但是出于可读性的目的,我不希望它打印echo命令。不幸的是,我无法为我的bash脚本找到正确的设置来实现这一点。我需要帮助吗?
#!/bin/bash
# Makes the bash script to print out every command before it is executed
set -v
echo "Cleaning test database"
RAILS_ENV=test bundle exec rake db:drop
echo "*************************************
在几个shell中,逻辑不(!)将“反转”程序的返回代码。
但是,在带有set -e的shell脚本中,逻辑上的“不”似乎会导致程序实际上永远不会失败。为什么会这样呢?
在bash、zsh和ksh中进行测试,结果相同。
$ cat test.sh
set -ex
# setup
touch myfile
# observe available files
ls .
# succeeds
ls myfile; echo $?
# this succeeds as expected
! ls notafile; echo $?
# why does this not exit when
帮助!我得到一个错误A1.sh:行205: 0:在运行我的脚本后没有找到命令。
让我困惑的是205行是一个注释!我试着编辑它,但仍然在同一行上得到一个错误。我所有的行尾都是LF。
下面是编辑后的代码块,205行现在是:
if `doesBookExist "$title" "$author"`
完整的代码块:
if [[ bookExist -gt 0 ]]
then
# get title from actual book (in case title input has bad case)
actualTitle=`cut -d ':
如果您在一个交互式shell中,然后键入如下内容:
echo this is it
然后,您可以展开第一个参数:
echo !^ #=> echo this
或者您可以扩展最后一个参数:
echo !$ #=> echo it
但现在我在想:
我将如何访问_n_th参数?我查看了,但似乎只有在脚本中才能这样做,因为!n只是遍历命令历史(而不是我的论证历史)--例如
echo !1 #=> echo ls
这很有道理,因为
history | grep -E '^\s+1 ' #=> 1 ls
但我想要的是echo !(som
我在IT服务台工作,刚开始编码,但把这个批处理文件放在一起,使我们的夜间更新完成得更快:
@echo off
echo.
echo RTC Customer Care - Variety Pre-Eigen Updater
echo (Continue along with 'ENTER' to reach desired update.)
echo.
pause
echo.
echo ====================================
echo Transfer Required Files to C: Drive?
echo
@echo off
color 4
ping localhost 2.5 > nul
echo Welcome to the configuration menu.
echo Move AH1.exe and AH2.exe to your desktop.
echo This only works the first time
echo SO BE CAREFUL!
echo Would you like this to start on computer startup?
echo say "yes" or "no" below.
set /p opt
如何在其他cmd控制台中运行脚本的一部分,在返回第一个控制台后等待完成并继续执行脚本?
eg脚本
REM [PART 1] start
echo test
echo test 2
echo test 3
REM [PART 1] stop
REM [PART 2] start in other CMD and wait for finish
echo test 4
echo test 5
echo test 6
unzip test 7
REM [PART 2] stop
REM [PART 1] start again
echo ***script finish***
exit
REM
我想运行一个.bat脚本,它创建一个文件并以与它所在的文件夹相同的名称保存它。我希望它从地图开始,然后循环遍历子映射。我从下面的代码开始,并在其中一个子映射中运行它。这是可行的,我得到一个文件与子地图的名称。
FOR /D %%I IN ("%CD%") DO SET _LAST_SEGMENT_=%%~nxI
ECHO Last segment = "%_LAST_SEGMENT_%"
echo.>%_LAST_SEGMENT_%.mp4
pause
所以现在我只需要把它放在一个for循环中。所以我做了下面的代码,这是不起作用的。%CD%似乎是指.bat
根据的说法,使用set -e内置应该足以让bash脚本在第一个错误时退出。然而,下面的脚本:
#!/usr/bin/env bash
set -e
echo "a"
echo "b"
echo "about to fail" && /bin/false && echo "foo"
echo "c"
echo "d"
指纹:
$ ./foo.sh
a
b
about to fail
c
d
删除echo "foo" 会停止脚本,但为什么呢?
有时我按Y键,它的意思是:不
有时我按N键,它的意思是:是的
我做错了什么?
现在循环应该执行3次,这不是问题所在。
只有打电话才不是好事。
希望有人能帮我
CD %INSTALLDIR%
SET test=
FOR /f %%a in ('dir /b /o:-n') do (
SET test=%%a
ECHO Generate a answer file for %test%?
set INPUT=
set /P INPUT=[Y/N]:
IF /I '%INPUT%'=='y' call :yes
IF /I '
如果失败的块位于一个条件链中,那么我试图弄清楚为什么错误保释行为-e不起作用:
#!/bin/bash
set -e
{ echo "First"
ls blat
echo "(this should not print)"
}
打印出来:
First
ls: cannot access 'blat': No such file or directory
这是正确的。
鉴于以下各点:
#!/bin/bash
set -e
{ echo "First"
ls b