今天我试着用bash脚本做一些棘手的事情,这让我对bash脚本的知识产生了疑问。
我有一个名为get_ftypes.sh的脚本,其中第一个输入参数是一个包含文件全局的文件
for ftype in `cat $1`
do
echo "this is ftype $ftype"
done
例如,脚本将被调用为这个get_ftypes.sh file_types,而file_types将包含如下内容:
*.txt
*.sh
我希望echo打印文件中的每一行,在本例中,这将是*.txt、*.sh等。但是,相反,它扩展了globbing,*,并与实际文件names相呼应,而不是
我有以下shell脚本。其目的是遍历目标文件的每一行(其路径是脚本的输入参数),并对每一行执行操作。现在,它似乎只处理目标文件中的第一行,并在该行被处理后停止。我的脚本有什么问题吗?
#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets
FILENAME=$1
count=0
echo "proceed with $FILENAME"
while read LINE; do
let count++
echo "$count $LINE"
sh ./do_work.sh
我可以遍历文件a.txt,在每一行上执行任意命令(本例中为echo),方法如下 xargs -n1 echo < a.txt 或 for a in $(cat a.txt); do echo $a; done 为什么我不能这样做呢? for arg do echo $arg; done < a.txt 哪一项返回成功,但没有输出?
我有一个for循环,它使用CIDR,其中包含文件名的非法字符("/")。
命令的一部分是用CIDR的名称保存输出。
for i in $(more subnets.lst);do shodan download $i-shodan net:$i;done
下载参数后面跟着more命令的结果,即CIDR (192.168.21.0/24)。
在运行循环时,bash中有重命名变量的方法吗?我记得几年前在批处理文件中从str长度中减去,但这对我没有帮助,因为我只需要将"/“替换为”-“(或任何其他符合要求的字符)。
我想在这里讨论两种逐行读取文件的方法:
#!/bin/bash
while read line
do
echo-e "$ line \ n"
done <file.txt
和
#!/bin/bash
exec 3<file.txt
while read line
do
echo-e "$ line \ n"
done
所以第一个版本运行得很好,但是我不理解while循环处理文件的机制。但我理解第二个版本的机制。但是在这里我不明白为什么它挂起并且不打印任何东西。
我正在尝试读取文件servers.txt并对其中的每一行执行ping操作。它的每一行都包含服务器。
#!/bin/bash
clear
output="pingtest.txt"
for line in < cat "servers.txt"
do
ping $line >> "$output" 2>&1
done
但是脚本根本不能工作,因为第4行的'<‘。我做错了什么?
给定文件“a.txt”中的每一行都包含另一个唯一文件的目录/路径。假设我们想逐行解析'a.txt‘,提取字符串格式的路径,然后使用诸如vim这样的工具在这个路径上处理文件,等等。
在浏览了这个线程- 之后,我在bash上编写了以下脚本,比如“open-file.sh”(我对它还不熟悉)
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
vim -c ":q" -cq $line # Just open the file and close it using :q
我的目标是有一个程序循环两个文件,用file1和file2的所有行组合计算一个单独的shell脚本。我通过将eval行移出while循环来验证它是否工作。
#!/bin/bash
while read line1
do
while read line2
do
eval "ssh_connect $line1 $line2"
done < $FILE2
done < $FILE1
ssh_connect根据命令行参数中提供的用户名和密码创建一个新的ssh连接。
set username [lindex $argv 0];
s
好的,我要解决的问题是:
我需要运行一个设置了一些标志的程序,检查它的进度并向服务器报告。因此,我需要我的脚本在程序执行时避免阻塞,但我还需要能够读取输出。不幸的是,我认为Popen提供的任何方法都不会在不阻塞的情况下读取输出。我尝试了下面的方法,这有点像hack-y (允许我们从两个不同的对象读写同一个文件吗?)
import time
import subprocess
from subprocess import *
with open("stdout.txt", "wb") as outf:
with open("stderr.txt
如何为选择提供一个条目来给出结果,当我在终端中运行代码时,它工作得很完美,代码是:
PS3="Enter the space shuttle to get quick information : "
# set shuttle list
select shuttle in columbia endeavour challenger discovery atlantis enterprise pathfinder
do
case $shuttle in
columbia)
echo "--------------"
在使用bash脚本读取文件时,我遇到了一些麻烦。
下面是我要读的文件:
--------------- (not in the file)
123.234 231.423
1223.23 132.134
--------------- (not in the file)
在这个文件中,这4个数字位于两个不同的行上,在文件的末尾保留了一条空白的行。每一行的末尾都没有“空格”字符。
当我试图使用这个脚本读取这个文件时:
for val in $(cat $myFile)
do
echo "$val ";
done
我确实有以下结果:
123.234
231.423
1
我对done < $1表示法有点困惑。
我正在尝试编写一个"sumnums“程序,它读取一个名为"nums”的文件,该文件有几行数字。然后,它应该打印出数字行,然后是所有数字的总和。
目前我有:
#!/bin/bash
sum=0;
while read myline
do
echo "Before for; Current line: \"$myline\""
done
for i in $myline; do
sum=$(expr $sum + $i)
done < $1
echo "Total s