gpt4 book ai didi

Bash 输入 if 和 else 语句

转载 作者:行者123 更新时间:2023-11-29 09:38:58 25 4
gpt4 key购买 nike

这是上下文:我正在制作一个小的 Linux 命令,以便在我创建 C 程序时自动创建基本代码。我的命令名称是 ctouch:它类似于 touch 命令,但在创建文件后,它还会创建 C 程序的基本结构:

#include <stdio.h>
#include <stdlib.h>

int main(){



return 0:
}

附加这些行有效。这是我的代码:

#! /bin/bash

for arg in "$@"
do
[ ${arg: -2} == ".c" ] && touch "$arg" || touch "$arg.c"

echo '#include <stdio.h>' > "$arg"
echo '#include <stdlib.h>' >> "$arg"
echo $'\nint main90{\n\n\t' >> "$arg"
echo $'\n\treturn 0;\n\n}' >> "$arg"
done

如您所见,它可以创建与 touch 可以接受参数一样多的文件。条件循环(do 之后的行)在我忘记指定 .c 扩展名时很有用:但问题是 ifelse 在参数不以 .c 结尾时执行 但是当我不“忘记”指定它是 C 文件时就可以了。

我该如何解决?

最佳答案

它没有走两个分支。它根据扩展名执行 touch,然后 echo 序列将其输出放在没有扩展名的文件中(如果您传入的是扩展名)。

我会重构使用case,使用here document打印多行,并完全跳过 touch;但最小的修复只是更改缺少扩展名的输出文件名。

for arg in "$@"
do
case $arg in
*.c) ;;
*) arg="$arg.c";;
esac

cat <<'____HERE' > "$arg"
#include <stdio.h>
#include <stdlib.h>

int main(){




return 0;
}
____HERE
done

通过这些更改,代码也应该可以移植到 POSIX /bin/sh

关于Bash 输入 if 和 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com