标签: scripting

将文件名替换为父文件夹名称

我有一堆文件,每个文件都在自己的子目录中。我需要编写一个脚本来重命名每个文件,使其与其目录具有相同的名称:例如,给出:

./1111/1234.pdf
./2222/2345.pdf
./1234/3214.pdf
Run Code Online (Sandbox Code Playgroud)

我需要将它们重命名为:

./1111/1111.pdf
./2222/2222.pdf
./1234/1234.pdf
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

scripting filenames rename files

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

用点设置变量选项

我正在尝试与一个不受我管理的系统交互,该系统正在执行一些 Unix 命令脚本和命令以轻松执行作业。

有一个变量替换不起作用,我想知道是否可以编写一个命令来避免这种情况。有很多变量需要设置,我希望有机会输入一个空变量。问题在于系统没有传递空变量并且根本没有设置该变量。我明白了

${option.VARIABLE}:错误替换

我尝试设置类似的东西但不起作用。

if [ -z ${option.VARIABLE} ]; 然后 option.VARIABLE=""; 菲;

任何想法?

scripting bash

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

通过编辑 /etc/password 文件禁用登录

我被分配生成一个脚本,该脚本可以禁用 ssh 服务的密码登录。知道我可以通过编辑 /etc/sshd_config 文件来执行此操作,但我的导师提到我应该查看的文件是 /etc/password 文件。这是我执行此任务的提示。这就是我所做的,我删除了用户中的“x”符号。我相信该字段是为散列密码保留的。

原本的

 pi:x:1000:1000:,,,:/home/pi:/bin/bash
Run Code Online (Sandbox Code Playgroud)

编辑后:

 pi::1000:1000:,,,:/home/pi:/bin/bash
Run Code Online (Sandbox Code Playgroud)

结果:没有密钥,我只能重新输入传递窗口。

为清晰起见更新:该脚本应用于回复公钥和私钥,以便登录 pi 服务器。换句话说,我尝试使用无密码登录,使其成为加强安全性的功能。

linux scripting users password

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

Linux bash 脚本 - 命令分组

我是 bash 脚本的新手,我在命令的聚合方面遇到了问题。正是在这行代码中:

timeout -s 9 1 echo $var | nc localhost port
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过 netcat 将变量 var 的数据发送到特定端口中的 localhost,并且我想将该命令超时 1 秒。阅读 timeout 的手册页我明白它应该被用作:

timeout -s SIGNAL TIME COMMAND
Run Code Online (Sandbox Code Playgroud)

我的问题是如何用管道命令 echo $var | 替换 COMMAND nc localhost 端口并进一步了解如何正确编写以下情况:

COMMAND1 | (COMMAND2 | COMMAND3)
Run Code Online (Sandbox Code Playgroud)

(COMMAND1 | COMMAND2) | COMMAND3
Run Code Online (Sandbox Code Playgroud)

如果我是对的,第二个例子相当于

COMMAND1 | COMMAND2 | COMMAND3
Run Code Online (Sandbox Code Playgroud)

但我不知道如何写第一个。

scripting bash

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

将 find 与 sh 一起使用 - 命令不起作用

我正在尝试搜索具有 pattern 的文件FW。从这些过滤后的文件中,我试图搜索 pattern chmod.*archive|archive.*chmod,然后列出它们。

我尝试使用以下命令,但它没有给我所需的输出。需要帮助来解决这个问题。

find . -name '*FW*' -exec sh -c "cat {}|grep -iEq 'chmod.*archive|archive.*chmod'|ls" \;|more
Run Code Online (Sandbox Code Playgroud)

scripting find shell-script

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

如何将命令的输出作为参数列表传递给脚本?

我想将内容添加到当前目录中每个文件的开头。我需要学习如何一次从当前工作目录中获取所有文件名并将它们作为参数;我不需要通过手动指定每个文件作为脚本的参数来做到这一点。我想将这些新知识用于进一步的脚本。我不需要横向或不同的解决方案。我需要学习如何获取命令 ( ls) 输出并将其作为参数。我尝试过但失败了:

./file-edit.sh $(ls)
./file-edit.sh `ls`
Run Code Online (Sandbox Code Playgroud)

这是我的脚本,它有效:

#!/bin/bash
lineno=2            # Append from line 2 
BAD_ARGS=85         # Error code

string0="###################################################################"
string2="#Description    :"
string3="#Date           :`date +%d-%B-%Y`"
string4="#Author         :Milos Stojanovic"
string5="#Contact:       :https://www.linkedin.com/in/xxx/"
string6="###################################################################"
# Can be any other strings

if [ ! -f $1 ]; then
        echo "Please specify at least 1 filename as an argument!"
        exit $BAD_ARGS
fi

until [ -z  "$1" ]
do
        string1="#Script Name    :$1"
        file=$1;
        sed -i ""$lineno"i $string0\n$string1\n$string2\n$string3\n$string4\n$string5\n$string6" $file
        echo "File "\'$file\'" altered at line …
Run Code Online (Sandbox Code Playgroud)

ls scripting bash arguments

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

shell 脚本可以在与正则表达式匹配的区域内查找和替换模式吗?

我想编写一个 shell 命令,stdout用空格替换匹配特定正则表达式的所有段落中的所有换行符。在这里,我将一个段落定义为以两个或多个新行结尾的任何文本。

具体来说,我想找到所有不以(or开头的文本段落,$并去除所有换行符的这些段落。

例如,运行我的脚本

Aliquam erat volutpat.  Nunc ( eleifend leo vitae magna.  In (i)yd erat non orci
commodo lobortis.  Proin $ neque massa, cursus ut, gravida ut, lobortis eget,
lacus.  Sed diam.

Hello world.

(Nullam tristique diam
non turpis.



Hello
$again!

$foo
bar
Run Code Online (Sandbox Code Playgroud)

应该导致

Aliquam erat volutpat.  Nunc ( eleifend leo vitae magna.  In (i)yd erat non orci commodo lobortis.  Proin $ neque massa, cursus ut, gravida ut, lobortis eget, lacus.  Sed …
Run Code Online (Sandbox Code Playgroud)

scripting sed awk

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

获取 termcap 功能的终端状态

如何检索像smam和这样的终端设置的状态rmam

原因是我设置rmam的:

tput rmam
Run Code Online (Sandbox Code Playgroud)

在脚本中,然后smam在退出时继续设置:

tput smam
Run Code Online (Sandbox Code Playgroud)

但是如果终端rmam在脚本启动时设置,我不想smam在退出时设置。


如何才能做到这一点?

scripting terminal tput terminfo

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

直到/同时和链 $?

我想在循环中执行一个命令,直到它以退出代码退出0,所以我尝试了:

$ while/until $?; do $command; done
Run Code Online (Sandbox Code Playgroud)

until/while似乎只接受布尔值true/false而不是0/1.

我是否错过了类似的[[ ]]东西或其他东西?

shell scripting bash shell-script

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

awk 提取符合条件的列

我正在编写一个脚本来准备一个包含第 5、6、7、8、10 和 13 列的 csv 文件;取第 44 列上等于 7 的行,同时也满足第 3 列上等于 1 的行。

输入:

"ID_Bcn_2019","ID_Bcn_2016","Codi_Principal_Activitat","Nom_Principal_Activitat","Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Codi_Activitat_2019","Nom_Activitat","Codi_Activitat_2016","Nom_Local","SN_Oci_Nocturn","SN_Coworking","SN_Servei_Degustacio","SN_Obert24h","SN_Mixtura","SN_Carrer","SN_Mercat","Nom_Mercat","SN_Galeria","Nom_Galeria","SN_CComercial","Nom_CComercial","SN_Eix","Nom_Eix","X_UTM_ETRS89","Y_UTM_ETRS89","Latitud","Longitud","Direccio_Unica","Codi_Via","Nom_Via","Planta","Porta","Num_Policia_Inicial","Lletra_Inicial","Num_Policia_Final","Lletra_Final","Solar","Codi_Parcela","Codi_Illa","Seccio_Censal","Codi_Barri","Nom_Barri","Codi_Districte","Nom_Districte","Referencia_cadastral","Data_Revisio"
1059038,"68849","1","Actiu","2","Serveis","14","Restaurants, bars i hotels (Inclòs hostals, pensions i fondes)","1400002","Restaurants","1400002","QUATRE COSES","1","1","1","1","1","0","1","","1","","1","","0","Rambla Catalunya","430088.542","4582365.352","41.38978196","2.16378361","089004, 329-329, LOC 10","089004","CONSELL DE CENT","LOC","10","329","","329","","114142","019","60490","079","07","la Dreta de l'Eixample","02","Eixample","0125419DF3802E","20190509"
1075454,"","1","Actiu","2","Serveis","16","Altres","1600400","Serveis a les empreses i oficines","16004","SORIGUE","1","1","1","1","1","0","1","","1","","1","","1","","427229.272","4577543.637","41.34610100","2.13016600","222206, 19-19, LOC 10","222206","MOTORS","LOC","10","19","","19","","","","","025","12","la Marina del Prat Vermell","03","Sants-Montjuïc","","20190925"
1075453,"","1","Actiu","2","Serveis","16","Altres","1600102","Activitats emmagatzematge","1600102","CEJIDOS SIVILA S.A","1","1","1","1","1","0","1","","1","","1","","1","","427178.393","4577526.160","41.34593900","2.12956000","222206, 278-282, LOC 10","222206","MOTORS","LOC","10","278","","282","","","","","025","12","la Marina del Prat Vermell","03","Sants-Montjuïc","","20190925"
Run Code Online (Sandbox Code Playgroud)

输出:

"Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Nom_Activitat","SN_Oci_Nocturn"
"2","Serveis","14","Restaurants, bars i hotels (Inclòs hostals, pensions i fondes)","Restaurants","1"
Run Code Online (Sandbox Code Playgroud)

目前,在我的脚本中,我有:

#!/bin/awk -f

BEGIN { FS = OFS = …
Run Code Online (Sandbox Code Playgroud)

scripting awk csv

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

标签 统计

scripting ×10

bash ×4

awk ×2

shell-script ×2

arguments ×1

csv ×1

filenames ×1

files ×1

find ×1

linux ×1

ls ×1

password ×1

rename ×1

sed ×1

shell ×1

terminal ×1

terminfo ×1

tput ×1

users ×1