以下是我目前用于测试 Debian 版本的内容。而不是这样做,我可以让它更简洁吗?
#!/bin/bash
VERSION=NONE
if [ $(cat /etc/debian_version) == '7.3' ]; then
VERSION=7
elif [ $(cat /etc/debian_version) == '7.2' ]; then
VERSION=7
elif [ $(cat /etc/debian_version) == '7.1' ]; then
VERSION=7
elif [ $(cat /etc/debian_version) == '7.0' ]; then
VERSION=7
fi
Run Code Online (Sandbox Code Playgroud)
我知道这不是最吸引人的方式。我想要的是了解如何使用文件 at/etc/debian_version读取之前的版本号.并忽略之后的版本号。
我尝试使用
if [ $(cat /etc/debian_version) == '7.*' ]; then
Run Code Online (Sandbox Code Playgroud)
我也试过
if [ $(cat /etc/debian_version) == '7.2|7.1|7.0' ]; then
Run Code Online (Sandbox Code Playgroud)
但这些都不适合我。我想将来证明我的脚本,这样如果 Debian 7.4 发布,那么我就不必回顾所有依赖于此的脚本并更改它们
我也知道lsb_release -a向我展示了相关信息,我只是不知道如何从中“剪切”我想要的内容并检查它是否是 Debian 6 或 7。正如您想象的那样,原始脚本很长.
您可以指向我的任何其他帖子,也将使用“切割”方法将响应分开以仅划分出我想要的部分,这也将不胜感激。
所以我有一个 bash 脚本,它可以做一些非常基本的事情(从 github 中提取,删除文件夹......等)。我通常在服务器上需要新版本的 Web 应用程序时运行它。
问题是没有任何东西可以阻止这个脚本由不同的人同时运行(几乎所有的开发人员都连接到这个服务器并且他们执行相同的命令)。
到目前为止,脚本同时由超过 1 个开发人员运行的情况并没有发生。
如果其他用户已经在运行此脚本,我如何确保它无法运行?文件夹锁定或检查脚本是否正在由另一个用户运行(这是否可行?)还有其他事情吗?
所有可以运行此脚本的用户都是 sudoers。
编辑:在检查我的同事后发现并非所有人都在使用脚本..他们中的一些人正在手动执行命令,所以我需要锁定文件夹本身。
我在vi. 我的输出运行到它下面的行中。我是 UNIX 的新手,所以我正在努力学习。我的输出使用printf.
printf "%-15s %15s %15s %2d\n %2s " $name $days $phone $start $time
Run Code Online (Sandbox Code Playgroud)
例如,输出看起来像这样
name days phone start
time name days phone start
time name days phone start
etc...
Run Code Online (Sandbox Code Playgroud)
如何让我的所有五个变量都打印在同一行上?
我尝试编写一个脚本,在其中逐行读取文件。我应该用逗号 (,) 替换反斜杠 (\)。
输入文件如下:
1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5
Run Code Online (Sandbox Code Playgroud)
我写的这段代码如下:
#!/bin/bash
cat $1 | while read -r line
do
ln=$(echo $line | xargs | sed 's/\\/,/g' )
echo $ln
done
echo Done!
Run Code Online (Sandbox Code Playgroud)
当我运行时./script.sh file.csv,我得到以下输出:
1,2,3,WORKSTATION1A,5
1,2,3,WORKSTATION2B,5
1,2,3,WORKSTATION1C,5
1,2,3,WORKSTATION1D,5
1,2,3,WORKSTATION1E,5
1,2,3,WORKSTATION1F,5
1,2,3,WORKSTATION1G,5
Done!
Run Code Online (Sandbox Code Playgroud)
而我期望输出如下:
1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5
Done!
Run Code Online (Sandbox Code Playgroud)
我也试过更换sed 's/\\/,/g'用tr "\\" ",",但它没有帮助。需要什么修改吗?
我有一个文件,其内容如下:
A,10,20,30,40,50
B,20,40,10,30,60
C,30,50,20,40,10
D,40,50,20,10,30
Run Code Online (Sandbox Code Playgroud)
我希望对上述 CSV 文件的特定列(比如第 3 列)执行一些算术运算(比如除以 10)。所以,它写道:
A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
我AWK=@AWK@在阅读sh脚本时发现 ,它类似于AWK=$(which awk),但它不起作用。那么任何人都可以解释这一点吗?
脚本 :
#!/bin/sh -
# makelist.sh: Automatically generate header files...
AWK=@AWK@
USAGE="Usage: $0 -n|-h|-e|-fc|-fh|-bc|-bh|-m <filenames>"
if [ "x$1" = "x" ]
then
echo $USAGE 1>&2
exit 1
fi
.....
.....
.....
-h)
set - `echo $FILES | sed -e 's/\\./_/g'`
hdr="_h_`basename $1`"
cat $FILES | $AWK '
BEGIN {
printf("/* Automatically generated file, do not edit */\n");
printf("#ifndef %s\n#define %s\n", "'$hdr'", "'$hdr'");
}
/\(\):/ {
pr = substr($2, 1, 2);
if …Run Code Online (Sandbox Code Playgroud) 对于我正在做的项目,我需要连接和压缩(使用 zip)许多(midi)文件并比较它们的大小。我认为一定有某种语言可以让我做这样的事情:
创建所有成对连接(即我需要合并文件 01.mid 和 02.mid 并创建文件 0102.*,我不在乎它是否是有效的 midi 文件,我只希望它具有两者的信息.tar 是一个不错的选择吗?)
独立压缩所有文件(原始和连接)
检查所有文件大小并将它们写在某个表中,然后我可以用 Matlab 或其他东西导入
我应该使用 bash 脚本吗?
我正在尽量减少使用鼠标。在终端中复制文本是避免鼠标最不方便的活动。现在,tmux帮助我达到这个目的。但是,我经常需要将当前输入的文本复制到 bash 提示符。当前输入的文本意味着我在提示中输入了一些符号,但没有按Enter。tmux为此目的的方式需要太多的键盘快捷键。
我想要一些脚本,将当前文本从提示复制到剪贴板。我想将此脚本添加到~/.bashrc并为其分配键盘快捷键。这个脚本怎么写?
是否有if用于 bash 脚本的所有开关的列表?有时我看到有人在使用它,我想知道他们使用的开关实际上是做什么的。
例子是-z在这个。我知道如何使用它,但我不知道它来自哪里。
if [ -z "$BASH_VERSION" ]; then
echo -e "Error: this script requires the BASH shell!"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
任何参考,指南,帖子,答案将不胜感激。谢谢!
基本上我想为变量 $finalbyte 分配一个值(它由一个字节的二进制表示组成,例如 11100000)。所以试图做到这一点,我把以下内容作为一些脚本的一部分:
field4=224 ##224 for example, it could be any number.
##Depends on the script
finalbyte=$(echo 'obase=2; ibase=10; ${field4}' | bc) ##<-------error here
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,这有点像显而易见的解释,但我的问题是我不知道或想象 $field4 可以在其他参数之间嵌套的方式。错误是:
(standard_in) 1: illegal character: $
Run Code Online (Sandbox Code Playgroud) find当我在某处进行更改时,我经常在我的代码项目中运行,我必须找到它影响其他代码片段的位置,所以我想写一个非常小的脚本来简化它,称之为blah.sh:
#!/bin/bash -eu
if [ $# -ne 3 ]; then
echo "Three inputs required"
else
find $1 -name $2 -exec grep -iHn $3 {} \;
fi
Run Code Online (Sandbox Code Playgroud)
问题是,当第三个参数(我要查找的文本)包含空格时,我会收到错误消息。例如,为每个试图探索的文件blah . '*.php' 'foo bar'返回。我确定这是一个愚蠢的错误,我并没有真正接触过 bash..grep: bar: No such file or directorygrep