我理解使用单引号和双引号.
但我不知道情况需要在脚本中加双引号.
这些陈述没有差异
$ echo hello world! $1
$ echo "hello world! $1"
Run Code Online (Sandbox Code Playgroud)
请告诉我正常和双引号之间的差异.
我有一个 bash 脚本,我想检查一个字符串是否在列表中。比如:string = "Hello World!", List=("foo", "bar")。蟒蛇示例:
if name in list: # Another way -> if name in ["foo", "bar"]
# work to do
else:
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我需要从头文件中提取一些信息,并且需要从如下字符串中获取站点名称:
0008 0080 LO Institution Name Site Name Here
Run Code Online (Sandbox Code Playgroud)
问题是网站名称也包含空格。我想到的唯一可行的方法是将行保存为字符串,然后在一定数量的字符后将站点名称作为字符串获取,如下所示:
回声 ${行:50}
但我想要更优雅的东西。
我刚刚注意到它还删除了Institution Name和之间的多个空格Site Name。
我有一些$f类似于以下内容的文本文件
function
%blah
%blah
%blah
code here
Run Code Online (Sandbox Code Playgroud)
我想在第一个空行之前附加以下文本:
%
%This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
%3.0 Unported License. See notes at the end of this file for more information.
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
top=$(cat ./PATH/text.txt)
top="${top//$'\n'/\\n}"
sed -i.bak 's@^$@'"$top"'\\n@' $f
Run Code Online (Sandbox Code Playgroud)
其中第二行(我认为)保留文本中的新行,第三行(我认为)用文本加上新的空行替换第一个空行。
两个问题:
1-我的代码附加以下文本:
%n%本作品根据 Creative Commons Attribution-NonCommercial-ShareAlike n%3.0 Unported License 获得许可。有关详细信息,请参阅此文件末尾的注释。\n
2- 将其附加到文件末尾。
有人可以帮助我理解我的代码的问题吗?
我从.txt文件中获取行:Say Input.txt
a
*
b
Run Code Online (Sandbox Code Playgroud)
然后我正在阅读它:
#!/bin/bash
file=$1
ans=0
while read -r line || [[ -n "$line" ]]
do
echo $line
done < $file # passing the file
Run Code Online (Sandbox Code Playgroud)
为此我得到以下输出
a
test main.py sic.sh
b
Run Code Online (Sandbox Code Playgroud)
显示我的目录的文件而不是*
我想根据*char来做一些决定,我需要检测/读取*?
如何仅对文件的“尾部”执行grep?
我正在尝试运行以下命令:
grep 'TEST COMPLETE' -L *.log
Run Code Online (Sandbox Code Playgroud)
TEST COMPLETE出现在最后几行中,此命令列出了文件夹中尚未完成测试的所有文件(由于-L)。日志很大,但是grep非常慢。
另一方面,我可以在尾部使用grep。grep几乎是即时的:
tail *.log | grep 'TEST COMPLETE'
Run Code Online (Sandbox Code Playgroud)
但是我不能使用-lor -L参数,因为我现在正在抓取管道输入而不是文件。因此,使用list files参数运行它:
tail *.log | grep 'TEST COMPLETE' -L
Run Code Online (Sandbox Code Playgroud)
只会输出: (standard input)
有什么办法可以让我grep搜索最后10行或类似内容吗?
假设我有一个变量目录路径DIR,我想列出该目录。如果我只关心路径中的空格,那么我可以这样做
ls "$DIR"
Run Code Online (Sandbox Code Playgroud)
如果我想在目录路径中也支持单引号和双引号以及其他奇怪的东西,我应该写什么?例子:
DIR="/Users/Mick O'Neil (the \"Terminator\")/Desktop"
echo $DIR # prints /Users/Mick O'Neil (the "Terminator")/Desktop
ls <what should I write here?>
Run Code Online (Sandbox Code Playgroud) 我有一个脚本可以找到文件夹中的文件,如果它们超过7天,则删除它们.但是,我有一点问题.
#!/bin/bash
BACKUPDIR=/home/vagrant/script/aerospike_backups
TIMESTAMP=$(date +%Y-%m-%d)
LOGPATH=/tmp/logs.txt
ADMINACC=email@example.com
EMEIL=rybka@gl.com
#Let's check existing backups, and if it's older than 7 days delete
find_old () {
if [ -z $(find $BACKUPDIR -mtime +7 -print ) ]
then
return 10
else
find $BACKUPDIR -mtime +7 -delete && echo "Backups deleted at $HOSTNAME on $TIMESTAMP" > $LOGPATH
fi
}
Run Code Online (Sandbox Code Playgroud)
如果我从终端使用./scriptname执行带有$ BACKUPDIR的脚本,那么输入echo $?shell按预期输出10个代码,因为没有7天的文件或根本没有文件.
但是在我添加更多如果条件之后
if [[ $(find_old | echo $?) -gt 0 ]]
then
echo "Script return error code"
else
echo "all is ok"
Run Code Online (Sandbox Code Playgroud)
脚本给了我输出all …
我正在尝试下载一堆文件,并在我去的时候重命名它们.下载部分工作正常,但我不能让它重命名文件.这是我正在使用的脚本:
COUNTER=0
for (( i = 696; i <= 773; i++ ))
do
fastq-dump --split-3 --accession SRR546$i
mv SRR546"$i"_1 ./"$COUNTER"mVD_SRR546$i_1
mv SRR546"$i"_2 ./"$COUNTER"mVD_SRR546$i_2
gzip *.fastq
COUNTER=$[COUNTER + 1]
done
Run Code Online (Sandbox Code Playgroud)
这将正确下载文件SRR546696,SRR546697等,但不会重命名它们.
我也试过用:
rename 's/SRR/"$COUNTER"mVD_SRR/' *.fastq
Run Code Online (Sandbox Code Playgroud)
但这也没有做任何事.
我有以下 shell 脚本,除了第一行之外,它在每一行中都缺少一些初始字符(到目前为止,在我的观察中它缺少最初的几个字符)。
只有当我使用ffmpeg命令时才会发生这种情况。否则,它很好。但是此命令执行此脚本中的实际任务。
为什么会这样,解决方法是什么?
#!/bin/bash
while read line; do
printf "%s\n" "$line"
ifile=$line
printf "%s\n" "$ifile"
ofile=abc_$line
printf "%s\n" "$ofile"
############### Problem is the following command: ##########
ffmpeg -y -i $ifile -c:v libx264rgb -b:v 512k -bf 0 -pix_fmt rgb24 -r 25 -strict -2 $ofile
##########rest is fine##########
echo $ifile
done < file_list
Run Code Online (Sandbox Code Playgroud)