Questions tagged «shell-script»

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

3
更改字符串中第n个字母的大小写
我想换一个字符串的第n个字母的大小写BASH(或任何其他的* nix工具,例如sed,awk,tr等)。 我知道您可以使用以下命令将整个字符串更改为大小写: ${str,,} # to lowercase ${str^^} # to uppercase 是否可以将“测试”的第三个字母的大小写更改为大写? $ export str="Test" $ echo ${str^^:3} TeSt


3
计算文件中的nul个分隔项
我有一个Shell脚本,用于find -print0将要处理的文件列表保存为临时文件。作为日志记录的一部分,我想输出找到的文件数,因此我需要一种方法来获取该计数。如果-print0未出于安全考虑使用该选件,则可以使用wc -l该计数。

1
inotifywait-重命名时获取新旧文件名
我正在寻找一种检测文件重命名并获取新旧文件名的可靠方法。这是我到目前为止的内容: COUNTER=0; inotifywait -m --format '%f' -e moved_from,moved_to ./ | while read FILE do if [ $COUNTER -eq 0 ]; then FROM=$FILE; COUNTER=1; else TO=$FILE; COUNTER=0; echo "sed -i 's/\/$FROM)/\/$TO)/g' /home/a/b/c/post/*.md" sed -i 's/\/'$FROM')/\/'$TO')/g' /home/a/b/c/post/*.md fi done 它可以工作,但是它假定您永远不会将文件移入或移出监视文件夹。它还假定事件成对出现,首先是move_from,然后是move_to。我不知道这是否总是对的(到目前为止有效)。 我读过inotify使用cookie链接事件。可以通过某种方式访问​​Cookie吗?缺少cookie,我考虑过使用时间戳将事件链接在一起。以更可靠的方式获取FROM和TO的任何提示吗? 完整脚本要点。

3
管道/重定向一组命令
我目前使用以下设置来重定向多个命令的输出: echo "Some normal commands" ( echo "Error: something happened" echo "Warning: this incident will be logged" ) >> logfile echo "More normal commands" 这非常有用,并且还可以与管道一起使用。 这是最好的方法吗?我是否应该考虑替代方案?

3
如何从bash shell脚本中并行调用服务URL?
我有从其他应用程序调用的服务。以下是我正在呼叫的服务网址- http://www.betaservice.domain.host.com/web/hasChanged?ver=0 我需要以多线程方式对我上面的服务URL进行一些负载测试,而不是一个个地依次调用。 bash shell脚本有什么办法,我可以通过多线程方式对其进行调用,从而对上述服务URL造成负担?如果可以的话,我可以有60-70个线程在上述URL上并行快速调用?

1
分发Shell脚本的正确方法
如果shell的行为可以被修改set并因此无法预测,那么分发shell脚本的最合适方法是什么? 例如,rm *.txt在set -f已运行的环境中不会按预期执行。rm *.txt在任何环境下,如何确保删除当前目录中的所有文本文件? 在总体分发外壳脚本之前,我应如何确保它们能够按预期运行?

2
创建一个将执行程序的Bash脚本,如果该脚本退出而没有崩溃,将再次运行它
我想知道最简单的创建bash脚本的方法,该脚本将在MacOSX中运行一个应用程序(这是一个基于UNIX的系统,因此我认为这是正确的地方)。等待程序退出。如果退出不是崩溃,请再次运行。否则,请打开崩溃报告窗口并退出。 我希望此脚本可以永久运行,直到崩溃或手动终止。 我有一个模糊的想法,但不确定。这是我到目前为止的内容: echo "Launching Autorun…" if ["$1" -eq "0"]; then # Application exited successfully. Restarting. /path/to/application.app else # An error occured. Do nothing and exit. exit fi

2
Bash脚本权限被拒绝且翻译错误
我正在使用kali Linux 64位。 我创建了一个Python脚本,该脚本需要2个参数才能启动。我不想每次都键入完全相同的路径,也不想在终端中使用的命令的历史记录中进行搜索。因此,我决定创建一个简单的脚本,该脚本以其参数调用python脚本。 #! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/ 这与我在终端中使用的命令完全相同。但是,当我尝试执行脚本文件时,出现错误消息。 bash: ./wtf.sh: /bin: bad interpreter: Permission denied wtf.sh具有可执行权限。 怎么了?

1
使用ssh和shell脚本在远程计算机上使用变量执行命令
我想使用本地计算机上的脚本来执行位于远程计算机上的命令和脚本。我知道可以使用来执行这些命令ssh,所以我做了: #!/bin/bash ssh username@target 'cd locationOf/theScript/; ./myScript.sh' 它运作完美。我希望此脚本使用变量更通用。现在它是: #!/bin/bash LOCATION=locationOf/theScript/ EXEC=myScript.sh ssh username@target 'cd ${LOCATION}; ./${EXEC}' 我得到这个错误: bash: ./: is a directory 我想远程机器不知道这些变量。那么有没有办法将它们导出到目标?

2
Shell脚本术语中扩展和替换之间的区别
在Shell编程语言中,扩展和替换似乎可以在相同的上下文中互换。例如,某些文件(例如Bash参考手册,Bash Hackers Wiki)使用“扩展”一词来解释“外壳参数扩展 ”。但是,其他一些文件似乎更喜欢“替代”一词。《高级Bash脚本指南》使用参数替换。 在shell编程术语方面,“扩展”和“替代”之间有什么区别吗?


1
插入或拔下HDMI时如何编写bash脚本以配置我的显示器
我有一台运行Kubuntu Precise(12.04)的笔记本,偶尔会用来观看视频。完成后,我插入连接有A / V接收器的HDMI电缆,并连接了HDMI监视器。 当我以这种方式观看视频时,与系统进行交互以控制播放等时,仍然需要使用笔记本显示器。 当我插入HDMI电缆时,Kubuntu会检测到它,但是我必须经历一个奇怪的舞蹈序列(该序列有效,但令人费解),才能每次正确设置视频和音频。为了解决这个问题,我正在尝试编写一个bash脚本xrandr以使其在第一次就正确执行。 我从Peoro的标题为“ U&L问答”的答案中得到了一个基本思想:当插入外部显示器时,该工具可以自动应用RandR配置。 关于我的剧本 我的脚本(包括在下面)可以工作,但是需要改进。 它为HDMI监视器正确设置了视频模式,但是LVDS1监视器(在笔记本电脑上)更改为仅显示桌面的左上部分-这是一个问题,因为它切断了右侧的窗口滚动条和底部。 我尝试使用修复此问题--scale,但第一次尝试将事情弄得一团糟,以至于我不得不重新启动才能恢复正常的显示。 有没有一种方法可以使两个显示器显示相同的内容,但是每个显示器都使用各自独立的首选分辨率? 或者至少是一种设置笔记本电脑显示器的方式,以便在使用HDMI显示器时仍可访问整个台式机? 由于我正在调试脚本,因此尚未清除。我可能想稍后再做。 我的剧本 #!/bin/bash ## hdmi_set ## Copyleft 11/13/2013 JPmicrosystems ## Adapted from ## /unix/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p ## Answer by peoro # setting up new mode for my VGA ##xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 …

1
使用“ find…-exec sh -c'...'sh {} +”的find命令如何工作?
@StephaneChazelas针对此问答发布了以下解决方案:使用“ find -exec {} +”遇到麻烦。 $ find . -iname "*.extension" -exec sh -c ' exec <command> "$@" <additional parameters>' sh {} + 这到底是怎么回事?具体来说,最后sh {}做什么?似乎只是为了平息find的-exec命令而已,以便它可以做一些事情,即NOOP。 我可以很容易地放在echo {}那儿,它似乎工作得很好。

3
Cron不在特定日期运行,而是在所有其他日期运行
我有一个cron设置,每天晚上10点执行bash脚本。我还有另一个cron设置,要在每月的1号运行。两个克朗都启动bash脚本,bash脚本中唯一不同的是它们传递给底层Java程序的参数(模拟Java程序的命令行启动)。 问题是,我需要以某种方式在每月的1号停用每日cron,以使两者都不会尝试在同一天运行。这可以自动执行吗? 我想我可以创建另一个bash脚本来在1日之前编辑cron,然后在备份内容之后再次编辑cron,但这似乎……不干净。

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.