标签: scripts

简单的 BASH - 如何逐行读取文件

我有一个包含以下内容的文件:

6 192.168.0.4   
13 192.168.0.2        
2 192.168.0.9
Run Code Online (Sandbox Code Playgroud)

第一个数字是右侧 IP 尝试从同一网络内登录我的机器 (ssh) 的次数。目标是在尝试次数超过 3 次时使用 netfilter 阻止该 IP。这里,有 2 个条目符合条件。注意:可能有 3 个以上的条目。

我想不出一种方法来逐行排序这个文件(我对 BASH 非常陌生)。这是我尝试过的:

#!/bin/bash
file="/home/foo/documents/iptxt"
while IFS='' read line || [[ -n "$line" ]]; do
  char1=`awk '{ print $1 }' $file`
  char2=`awk '{ print $2 }' $file`
  if $char1 -gt 3
  then
    echo "$char2 has tried to login $char1 times
  fi
done <$file
Run Code Online (Sandbox Code Playgroud)

这给出了指向第 5 行(if 语句)的“未找到命令”错误。难怪,因为我回应了 $char1_attempt 并且它给出了:

6 13 2
6 13 2
6 13 2
Run Code Online (Sandbox Code Playgroud)

目前,J …

command-line bash scripts text-processing

2
推荐指数
1
解决办法
5957
查看次数

无法使用 Bash 脚本设置环境变量

我想从我编写的 bash 脚本中设置一个环境变量。所以我创建了一个 bash 脚本并将其命名为set.sh. 其内容如下:

#!/bin/bash

export DEV_SRC="/home/m/mydata/sourecCode"
echo $DEV_SRC
Run Code Online (Sandbox Code Playgroud)

当我运行这个脚本时,输出是

/home/m/mydata/sourecCode
Run Code Online (Sandbox Code Playgroud)

但是,如果我在运行上述脚本的同一终端上运行此代码,

echo $DEV_SRC
Run Code Online (Sandbox Code Playgroud)

我看不到任何值,因此我认为该值未导出。

为什么不导出值?

command-line bash scripts environment-variables

2
推荐指数
1
解决办法
6654
查看次数

如何仅删除在特定日期和时间之前创建的文件

我想从我的目录中删除在 04/29/2018 下午 4:00 之前创建的文件。

谢谢

bash scripts files rm date

2
推荐指数
1
解决办法
9052
查看次数

bash与psql结合使用,在它们之间传递变量

我正在编写一个使用 psql (Postgresql) 的 bash 脚本。

DATABASE='scifi'

sudo -u postgres psql
count=SELECT COUNT(*) FROM (SELECT datname FROM pg_catalog.pg_database WHERE lower(datname)=lower($DATABASE)
Run Code Online (Sandbox Code Playgroud)

我想删除数据库(如果存在)并使用相同的名称重新创建并分配给用户。

还有其他与 psql 相关的操作。

我的问题是,一旦我输入 psql,我就无法传递 bash 命令和检索信息。我有点理解为什么(因为我正在从 bash 转移到 psql),但我必须找到解决方案。

bash scripts postgresql

2
推荐指数
1
解决办法
6709
查看次数

在相对于主脚本的目录中调用脚本

目前,我正在使用一个 shell 脚本并制作一个系统,我在其中编写一个 shell 脚本,main.sh并且在同一个目录中有一个包含其他 shell 脚本的目录。结构是:

root_directory
|___scripts
|   |___script1.sh
|   |___script2.sh
|   |___script3.sh
|
|___main.sh
Run Code Online (Sandbox Code Playgroud)

现在main.sh是基本文件。在此,main.sh我将脚本称为

bash ./scripts/script1.sh
bash ./scripts/script2.sh
Run Code Online (Sandbox Code Playgroud)

等等。
当我main.shroot_directory目录运行文件时,一切正常。但是我想全局安装整个系统,因为我可以main.sh从任何地方运行文件并且它可以找到scripts子文件夹。

如果有任何疑问,请随时发表评论。

command-line bash scripts

2
推荐指数
1
解决办法
316
查看次数

为什么我的简单 Python 秒表脚本占用了如此多的计算机资源?

我今天开始为秒表使用 Python 脚本,并注意到我打开的所有其他东西(Firefox、Sublime Text、终端)都显着变慢。系统监视器告诉我我的秒表脚本使用了大约 24% 的 CPU。如此琐碎的事情使用这么多资源似乎很奇怪。

我能得到一些关于如何改进这一点的建议吗?我真的很想在后台运行它并跟踪我花在各种事情上的时间。

这是脚本:

#! /usr/bin/env python3
import tkinter
import time
import datetime
import numpy as np 
import subprocess

class StopWatch(tkinter.Frame):

    @classmethod
    def main(cls):
        tkinter.NoDefaultRoot()
        root = tkinter.Tk()
        root.title('Stop Watch')
        root.resizable(False, False)
        root.grid_columnconfigure(0, weight=1)
        root.geometry("200x235")
        padding = dict(padx=5, pady=5)
        widget = StopWatch(root, **padding)
        widget.grid(sticky=tkinter.NSEW, **padding)
        icon = tkinter.PhotoImage(file='stopwatch.ico')
        root.tk.call('wm', 'iconphoto', root._w, icon)
        root.mainloop()

    def __init__(self, master=None, cnf={}, **kw):
        padding = dict(padx=kw.pop('padx', 5), pady=kw.pop('pady', 5))
        super().__init__(master, cnf, **kw)

        self.grid_columnconfigure(0,weight=1)

        self.__total = 0
        self.start_time=datetime.datetime.now().strftime("%H:%M")
        self.start_date=datetime.datetime.now().strftime("%m/%d/%Y")
        self.start_dt=tkinter.StringVar(self, self.start_time+" …
Run Code Online (Sandbox Code Playgroud)

python command-line scripts tkinter

2
推荐指数
1
解决办法
817
查看次数

将 bash 脚本一起更改为所有文件

我有一个 bash 脚本从 .vcf 文件中提取一些信息。我如何以某种方式更改此脚本以同时处理一堆 .vcf 文件,并为每个文件返回单独的 .txt 输出?

这是我的脚本

#!/usr/bash

#outfilename
outname=$(echo $1".parsed.txt")

#Header for output file
echo -e "Chrom"'\t'"Position"'\t'"Ref"'\t'"Alt"'\t'"TumorReadCount"'\t'"TumorVariantAlleleCount"'\t'"TumorReferenceAlleleCount"'\t'"NormalReadCount"'\t'"NormalVariantAlleleCount"'\t'"NormalReferenceAlleleCount"'\t'"VAF" > $outname

while read -r line ; 
do;

#Basic information
chrom=$(echo $line | sed 's/ /\t/g' | cut -f 1) #&& echo $chrom;
Pos=$(echo $line | sed 's/ /\t/g' |  cut -f 2) #&& echo $Pos;
Ref=$(echo $line | sed 's/ /\t/g' | cut -f 4)
Alt=$(echo $line | sed 's/ /\t/g' | cut -f 5)

#Tumor sample read, …
Run Code Online (Sandbox Code Playgroud)

bash scripts

2
推荐指数
1
解决办法
136
查看次数

用于计算域到期剩余天数的 Bash 脚本

您好,我有一项任务是查找域过期的剩余天数。的输出应保持的天数(整数),所以我试图这样我可以通过域作为参数

例如:- 我的域 - www.xplosa.com

脚本文件:- ./domain-exp.sh

执行方法:- ./domain-exp.sh www.xplosa.com

#!/bin/bash

target=$1

# Get the expiration date
expdate="$(whois $1 | egrep -i 'Registrar Registration Expiration Date:' | head -1)"

# Turn it into seconds (easier to compute with)
expdate=("$expdate" +%s)

# Get the current date in seconds
curdate=$(date +%s)

# Print the difference in days
echo  ($expdate - $curdate) / 86400 
Run Code Online (Sandbox Code Playgroud)

这不是我期望的输出,请帮助我解决这个问题,谢谢。

command-line bash scripts 18.04

2
推荐指数
1
解决办法
993
查看次数

在终端中启用/禁用麦克风

我想启用或禁用终端中的麦克风。我该怎么做?例如,我sudo modprobe -r uvcvideo用来禁用网络摄像头并sudo modprobe uvcvideo启用它。是否有对麦克风进行相同操作的命令?

command-line scripts microphone

2
推荐指数
1
解决办法
1600
查看次数

批量 FFmpeg 编码 - 基于比特率的可变 CRF

我在运行 Ubuntu 的 VM 实例中使用 ffmpeg 将从各种流媒体站点下载的一些视频编码到 HEVC。目前我使用 bash 脚本来转换目录中的所有这些文件。这些视频的总体比特率在 300 kb/s 到 1500 kb/s 之间变化。在我的测试中,对所有这些视频使用相同的 CRF 会在高比特率视频的情况下产生更大的输出文件,或者在低比特率的情况下产生低质量的视频。目前我手动检查比特率并将类似的比特率文件移动到一个目录并每次都相应地更改 CRF。这是我用来检索比特率的命令:

find . -name "*.mp4" -print0 | xargs -0 -i{} sh -c " echo -n '{} ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' "
Run Code Online (Sandbox Code Playgroud)

这是 bash 脚本。

#!/bin/bash -e
for i in ~/ffmpeg/*.mp4;    
do    
ffmpeg -i "$i" -c:v libx265 -crf 26 -c:a libopus -b:a 48k -vbr on -compression_level 10 -frame_duration 60 -application audio "${i%.*}.mkv"    
mv "${i%.*}.mkv" ~/ffmpeg/hevc …
Run Code Online (Sandbox Code Playgroud)

command-line bash scripts ffmpeg encoding

2
推荐指数
1
解决办法
814
查看次数