我正在寻找switch语句的正确语法与Bash中的初级案例(理想情况下不区分大小写).在PHP中我会编程它像:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Run Code Online (Sandbox Code Playgroud)
我希望在Bash中也一样:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Run Code Online (Sandbox Code Playgroud)
这在某种程度上是行不通的:do_what_you_are_supposed_to_do()当$ C为2或3时,应该触发函数.
我的bash shell需要3-4秒才能启动,而如果我启动它--norc会立即运行.
我开始"分析" /etc/bash.bashrc并~/.bashrc通过手动插入return语句和寻求速度改进,但它不是一个定量过程而且效率不高.
如何配置我的bash脚本并查看哪些命令需要花费大部分时间来启动?
如果我输入bash -x选项,它将显示所有行.但脚本将执行正常.
我该如何逐行执行?我可以看到它是否做了正确的事情,或者我中止并修复了这个bug.read每一行都有相同的效果.
我会喜欢像Microsoft Visual Studio在bash中逐行调试的东西,当前的变量值等等.
有没有工具或方法可以做到这一点?set -x并且set -v很好但不完美.
我继承了700多行shell脚本,注意到当我运行脚本时,它会在某个执行点吐出错误.
例如,我在控制台上看到的错误是这样的
cat: /Wreck/wreck_module.rb: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我试图使用set -x此链接中的大部分提示,但是我注意到我得到的所有输出都非常嘈杂.
有没有办法获得shell命令返回非零状态的确切行号?
我有一个名为'simple'的脚本文件.我可以使用./simple运行它,一切正常.
我需要在GDB中运行此文件以回溯一个特定参数的更改方式以及调用的函数.当我尝试
(gdb) file simple
Run Code Online (Sandbox Code Playgroud)
"/ home/examples/simple":不是可执行格式:无法识别文件格式
(gdb) r simple
Run Code Online (Sandbox Code Playgroud)
启动程序:简单
没有指定可执行文件.
使用"file"或"exec-file"命令
我怎么能克服这个?
使用默认终端在MacOSX 10.13.3上运行。当我尝试使用grep命令时,我将其作为输出接收。无论。我更改了目录,选项,甚至grep单独返回了相同的内容。它返回:
grep: conflicting matchers specified
Run Code Online (Sandbox Code Playgroud)
最近,我在Homebrew上安装了一些新的命令行工具,并相信我brew install grep正在尝试在计算机上获取正式的linux版本。这是我能想到的唯一改变。
这是痕迹。如您所见,grep命令成功运行,但是输出是错误消息而不是结果:
命令
grep -l 'this' *.txt
Run Code Online (Sandbox Code Playgroud)
跟踪
+ grep -GFh -l this ga_users.txt montecitovt_apache_logs-2018-02-09_21-58-40.txt tag_manager_more_than_one_ga_account.txt urls_in_sitemap.txt
grep: conflicting matchers specified
++ update_terminal_cwd
++ local url_path=
++ local i ch hexch LC_CTYPE=C LC_ALL=
...
[REDACTED]
Run Code Online (Sandbox Code Playgroud) 我有4个shell变量集
remote_account="raccname"
remote_machine="server"
First_Name="firstname"
Last_Name="lastname"
Run Code Online (Sandbox Code Playgroud)
当我打电话remote_account或remote_machine在我的剧本中,他们得到了很好的使用
echo "What directory shall you choose?"
read dir
scp -r ~/csc60/$dir $remote_account@$remote_machine:directoryA
exit;;
Run Code Online (Sandbox Code Playgroud)
但是当我打电话给其他两个人的时候
echo "What directory shall you choose?"
read dir
scp $remote_account@$remote_machine:tars/$Last_Name_$First_Name_$dir.tar.z ~/tars
exit;;
Run Code Online (Sandbox Code Playgroud)
当我扔进去时,它会抓取tars文件tars/$dir.tar.z完全跳过它仍显示为"lastname"$Last_Name_$First_Name_echo $Last_Name
变量之间是否有一些使用"_"的规则,或者我只是遗漏了一些明显的东西?
我在bash脚本中使用以下代码来跟踪代码
#!/bin/bash
function trace()
{
echo "TRACE" \
"${BASH_SOURCE[1]}:${BASH_LINENO[0]}:${FUNCNAME[1]}:" \
"$BASH_COMMAND"
}
set -o functrace
shopt -s extdebug
trap trace DEBUG
# Remainder of code here
exit 0
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它会吃掉我的变量.一些线索?