bash 或语句否定的首选用法是否有区别?
if ! [[ -z "${var}" ]]; then
do_something
fi
Run Code Online (Sandbox Code Playgroud)
相对
if [[ ! -z "${var}" ]]; then
do_something
fi
Run Code Online (Sandbox Code Playgroud) 我需要在 Linux 上创建第二个单独的虚拟接口。
我选择dummy。并执行以下步骤:
$ cat /etc/modules-load.d/dummy.conf
# Load dummy.ko at boot
Run Code Online (Sandbox Code Playgroud)
假的
$ cat /etc/sysconfig/network-scripts/ifcfg-ethdummy1
NAME=ethdummy1
DEVICE=ethdummy1
MACADDR=00:22:22:ff:ff:ff
IPADDR=10.10.10.1
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
Run Code Online (Sandbox Code Playgroud)
似乎一切正常。但在网上我看到人们也这样做:
$ cat /etc/modprobe.d/dummy.conf
install dummy /sbin/modprobe --ignore-install dummy; /sbin/ip link set name ethdummy1 dev dummy0
Run Code Online (Sandbox Code Playgroud)
这条线有什么意义?谢谢。
我有一个 bash 脚本,它根据命令提示符的输入重命名文件夹中的文件:
echo "Please rename and press enter" read rename
if [ -z "$rename" ]; then
printf "no caption was selected, aborting!\n"
exit 1
fi
printf "rename is $rename\n" count=1
for i in *.jpg; do
j=printf "%04d" $count
j="$rename"$j".jpg"
count=$((count + 1))
mv "$i" $j
done
fi
shift
done
Run Code Online (Sandbox Code Playgroud)
如何修改此脚本,以便根据文件大小重命名文件夹中的文件?
如果我根据大小对文件进行排序,它们在文件夹中将如下所示:
a009 978kb
a001 567kb
a003 499kb
a008 432kb
Run Code Online (Sandbox Code Playgroud)
所以我想重命名生成的文件:
a001 978kb
a002 567kb
a003 499kb
a004 432kb
Run Code Online (Sandbox Code Playgroud) 这个命令:
echo '$$foo=bar' | sed -E "s/(\$\$foo=).*/\1$(echo hello)/"
Run Code Online (Sandbox Code Playgroud)
输出:
$$foo=bar
Run Code Online (Sandbox Code Playgroud)
如果我将sed's 引号更改为单引号并将命令括在双引号中:
echo '$$foo=bar' | sed -E 's/(\$\$foo=).*/\1'"$(echo hello)"'/'
Run Code Online (Sandbox Code Playgroud)
它输出所需的结果:
$$foo=hello
Run Code Online (Sandbox Code Playgroud)
所以我想问题出在扩展的正则表达式和引号上,除非我遗漏了一些明显的东西。
sed在命令替换中连接单引号和双引号是一个好的做法( sed 's/foo/'"$(command)"'/')吗?
如何使用sed扩展正则表达式转义双美元符号?
我创建了脚本,在那里我用 base64 编码了 28 次字符串。然后我想在输出的字符串中回显字符数。
首先我使用${#var}它给了我 34070。
然后我尝试了相同的字符串
script.sh | wc -c
Run Code Online (Sandbox Code Playgroud)
这给了我 34071。
#!/bin/bash
var="9M"
for i in {1..28};do
var=$(echo $var | base64)
done
echo ${#var}
Run Code Online (Sandbox Code Playgroud)
究竟是什么使这两个输出不同?
dc可以从文件或/和标准输入中读取命令。
如果我想打印用户输入:
cat essai_dc
[enter a number : ]
n
?
p
dc essai_dc
enter a number : 4
4
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用heredoc:
dc <<EOF
> [enter a number : ]
> n
> ?
> p
> EOF
enter a number : dc: stack empty
Run Code Online (Sandbox Code Playgroud)
我对标准输入也一样:
cat essai_dc | dc
enter a number : dc: stack empty
Run Code Online (Sandbox Code Playgroud)
命令 ?获取p并执行它,但堆栈为空。
是否有可能让它工作(告诉dc等待输入)
我查看了手册ps,它说-e将列出所有进程,而-u将列出特定用户的进程。
所以我尝试使用ps -eu myaccount | wc -l它输出280。
但如果我使用ps -u myaccount | wc -l它会输出 12。
既然两者都是为用户输出所有的过程myaccount,为什么结果会不同呢?
这个问题是关于在一个范围内生成随机数,这很好,但不适合我的情况。
\n我将用 SQL 术语进行解释,因为在我看来,这更容易理解,尽管问题是关于bash. 我的想法是用代码的结果bash构建一个SQL脚本。
我有两张 MySQL 表,一张是people,一张是places。每条记录都有一个唯一的整数 ID,范围为 1 到 139(地点)和 1 到 1519(人)。它们通过外键相互联系,意思是:一个地方可以有很多人,但一个人只能有一个地方。
\n# 1-139 # 1-1519\nplace1 \xe2\x86\x92 person1\n \xe2\x86\x92 person2\n \xe2\x86\x92 person3\n ... and so on\nRun Code Online (Sandbox Code Playgroud)\n我现在掌握的数据是,在一个地方所有的人都有联系,而其他地方没有任何联系。
\n名额有139个,人数有1519人,所以我有1个名额,有1519人。
\n我的目标是将人员随机分配到各个地方,并且每个地方至少有一个人。
\n到目前为止我的代码是这样的:
\n$ c=1519\n$ while [[ $c -ne 0 ]]; do \n x=$((shuf -i 1-139 -n 1))\n [[ $x -gt 139 ]] && continue\n echo $x\n (( c-- ))\n done\nRun Code Online (Sandbox Code Playgroud)\n此代码生成 1-139 之间的 …
我在最新版本的 arch linux 5.5.6-arch1-1 上使用最新版本的 vim 8.2.148。
如果我想从光标复制到句子中的一个字母,我可以这样做,例如在这句话中,如果我的光标位于句子的开头并且我想猛拉直到复制的 c 我会给出命令yuc,它将复制“如果我愿意”。
另一个同样有效的示例是从字符串的开头猛拉到此字符串中“屏幕截图”的第二个实例的开头:
/home/user/linux_config/script_yad/screenshots/change_screenshots_directory.sh
Run Code Online (Sandbox Code Playgroud)
但是,如果我的光标在这句话的开头,并且我想拉到并包括第二个句子,我该怎么做?
我认为这样的命令在结构上可能看起来像yt2"sentence"虽然这个命令不起作用。
显然,使用字母 s 进行 yank 不会令人满意。
我希望在不使用视觉模式的情况下实现这一目标。
这是否需要插件,如果需要,是哪个?
这可以在没有插件的情况下完成吗?
所以我有一个带有嵌套文件夹的目录,并且在某些时候还有.png图像。
这些图像的命名是这样的“letters_numbers_numbers_letters.png”,我想删除数字之间的下划线。
假设我们有一个名为 的文件a_1_2_b.png,我想将其重命名为a_12_b.png. 我知道我必须使用类似的东西:
find . -name "*[0-9]_[0-9]* -type f -exec bash -c <enter_code here>`
Run Code Online (Sandbox Code Playgroud)
但我不确定如何指定如何删除这个特定的下划线。请记住,还有另外两个下划线我不想碰。
提前致谢!