Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。

2
动态构建命令
我正在编写脚本,因此需要tar动态生成命令。 这是两个示例,以说明我要执行的操作: #!/bin/bash TAR_ME="/tmp" EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*") _tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" echo -e "\n\nNEXT:\n\n" EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*") _tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" 我希望能够_tar用作命令,已经能够使其与经典路径一起使用,但是我需要它与文件夹名称中的空格一起使用。而且每一次我都会看到类似以下的错误: COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" -zcf tmp.tar.gz …

6
Bash根据元素的长度对数组进行排序?
给定一个字符串数组,我想根据每个元素的长度对该数组进行排序。 例如... array=( "tiny string" "the longest string in the list" "middle string" "medium string" "also a medium string" "short string" ) 应该排序为... "the longest string in the list" "also a medium string" "medium string" "middle string" "short string" "tiny string" (此外,如果列表按字母顺序对相同长度的字符串进行排序,那将是很好的选择。在上面的示例medium string中,middle string即使它们的长度相同,也对它们进行了排序。但这不是一个“硬”的要求,如果这样会使字符串复杂化,解)。 可以就地对数组进行排序(即修改“数组”)或创建新的排序数组都可以。


2
XML命令行(shell脚本)操作
如何在Shell脚本中从命令行操作XML? 有许多用于处理表格数据,替换环境变量或用正则表达式替换文本片段的命令,但是我还没有发现任何针对XML的命令。 我的构建脚本需要在xml文档的主标签中插入一个带有内容的标签,为此我发现在OS中安装Java,Perl或python是一个杀手kill脚(我的脚本是在gitlab中使用docker镜像完成的,因此我的工作使用maven:3.5-jdk-8图片中可用的工具将是一个梦想)。 我不想用sed处理XML,尽管在我的构建脚本中它可以工作,因为它很邪恶。 示例:我有以下xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- a lot of other tags--> </project> 我想插入以下代码块: <distributionManagement> <repository> <id>private-releases</id> <url>https://my.private.server.com/nexus/repository/maven-releases/</url> </repository> </distributionManagement> 在项目代码中(并且无论是在开始还是结束时都没有关系。

3
用字符串变量保护Shell命令
在一种编程语言中,我执行一个简单的shell命令 cd var; echo > create_a_file_here 与var是一个变量,其中包含一个字符串(希望)到我要在其中创建文件“ create_a_file_here”的地方的目录。现在,如果有人看到这一行代码,则可以通过分配例如来利用它: var = "; rm -rf /" 事情可能变得很丑。避免上述情况的一种方法可能是在var中的字符串中搜索一些特殊字符,例如';'。在执行shell命令之前,但是我怀疑这是否涵盖了所有可能的漏洞利用。 有谁知道一种确保“ cd var”仅更改目录而没有其他更改的好方法?

7
与`source`命令相反
我source在bash脚本中使用命令以读取/打印变量值 more linuxmachines_mount_point.txt export linuxmachine01="sdb sdc sdf sdd sde sdg" export linuxmachine02="sde sdd sdb sdf sdc" export linuxmachine03="sdb sdd sdc sde sdf" export linuxmachine06="sdb sde sdf sdd" source linuxmachines_mount_point.txt echo $linuxmachine01 sdb sdc sdf sdd sde sdg source取消设置变量的反义词是什么? 预期成绩 echo $linuxmachine01 < no output >

4
如何同时移动和重新创建文件夹?
我statistics在Ubuntu服务器中有一个名为定期存储数据文件的文件夹。重新创建文件夹以用于存储新文件时如何重命名statistics文件夹?backup-xxstatistics 文件statistics夹中的文件由PHP创建file_put_contents。 我更喜欢重命名文件夹,因为文件夹中有很多文件statistics。

4
shell脚本是否可以打印其引号,就像您在shell提示符下编写引号一样?
在shell脚本中,我的理解是"$@"扩展到脚本参数,并根据需要引用它们。例如,这会将脚本参数转发给gcc: gcc -fPIC "$@" 但是,当使用bash传递到stdin的语法时<<<,"@$"却无法正常运行。 #!/bin/bash cat <<< "$@" 调用脚本./test.sh foo "bar baz"给 foo bar baz 我希望 foo "bar baz" 有没有一种方法可以像在shell提示符下那样编写可打印其参数的shell脚本?例如:关于下一步要使用的命令的提示,包括提示中的脚本参数。

7
grep来自file2的确切行块(file1的内容)
我有两个文件,file1和file2。 的样本内容file1是: A B C D E F G H 的内容file2如下: A B few other lines E F few more other lines A B C D E F G H few more other lines G H 因此,我只想搜索整个file1内容块file2。这意味着输出应仅包含以下行: A B C D E F G H 请注意:-只有合并在一起的行才应该是输出的一部分。

5
查找多个文件中字符串的最后一次出现
我需要搜索多个日志文件(过去24小时内生成的所有文件,都保存在同一目录中)以查找字符串的最后一次出现。这是我写的命令: find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1 但这仅返回一个文件的最后一行。关于如何调整所有线条的任何建议?

5
Shell脚本:在文本中间(有时在开头)抓取字符串
我有一个很大的文本文件,其中的一部分看起来像这样(编辑后的值): JULIANA XXXX006060 LI1033322 THC BRL 730.00 XXXX006296 AA1004737 THC BRL 1,740.00 SANTOS JULIANA XXXX006668 AA1004786 THC BRL 8,150.00 SANTOS JULIANA CABINDA XXXX006697 AA1004777 THC BRL 2,325.00 SANTOS JULIANA XXXX006699 AA1004790 THC BRL 2,325.00 JULIANA BATA XXXX006141 CCC012946 THC BRL 1,460.00 JULIANA BATA XXXX006153 CCC013054 THC BRL 870.00 JULIANA XXXX006269 …


2
为什么printf会输出比预期更多的参数?
为什么此shell脚本打印两次输入? 我希望脚本在5之后会忽略输入。 脚本: #! /bin/bash echo "Enter 5 words : " read a b c d e printf "> %s %s %s %s %s <" $a $b $c $d $e 输出: user@linux:~$ pico ifs2.sh user@linux:~$ ./ifs2.sh Enter 5 words : 1 2 3 4 5 > 1 2 3 4 …

4
使用CLI按日期将文件移动到其他目录
我要整理的旧硬盘中有大量图片。如果运行ls -l,我注意到所有这些文件的创建日期均为2012年或更早。理想情况下,我想将它们移动到计算机的第二个硬盘驱动器,该硬盘驱动器未设置为自动安装。最好,我可以将某些命令链接在一起,以批处理方式完成所有这些工作。到目前为止,我ls -l | grep -i 2012只在所提供的日期中吐出了2012年的文件ls -l。现在,诀窍是将cp所有这些文件都移到新目录中。我不确定下一步该怎么做,因为每个文件都必须复制。下一组命令是什么?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.