我在使用 bash 时遇到问题。我试图将命令放入if
语句中,然后将其与字符串进行比较。
这完美地工作。
echo $(ipcs | grep Shared | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
当我把它放在if
声明中时,我遇到了一些问题。
$ if [ "$(ipcs | grep Shared | awk '{print $2}')" -eq "Shared"]; then
echo expression evaluated as true;
else
echo expression evaluated as false;
fi
bash: [: missing `]'
expression evaluated as false
$ if [ "$(ipcs | grep Shared | awk '{print $2}')" = "Shared"]; then
echo expression evaluated as true;
else
echo expression evaluated as false;
fi
bash: [: …
Run Code Online (Sandbox Code Playgroud) 你将如何 grep 只包含 5 或 6 个数字的行?像这样的东西。
case 1(有前导空格)
10 2 12 1 13
Run Code Online (Sandbox Code Playgroud)
情况 2(无前导空格)
1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
我认为这样的事情会奏效。
grep -E '[0-9]{5}'
Run Code Online (Sandbox Code Playgroud) 这有效,但我这样做的方式有点愚蠢。有一个更好的方法吗?
for e in $(ipcs | awk '{print $2}'); do
[[ "$e" = "Semaphore" ]] && break
echo $e
ipcrm shm $e
done
echo $e outside for loop
for e in $(ipcs | awk '{print $2}'); do
[[ "$e" = "Message" ]] && break
echo $e
ipcrm -s $e
done
echo
exit 0
Run Code Online (Sandbox Code Playgroud)
这就是我运行 ipcs 时的样子。
$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 262145 bob 600 393216 2 dest
0x00000000 2523138 bob …
Run Code Online (Sandbox Code Playgroud) 我使用没有 dos2unix 的旧服务器,我想将 Windows 文件转换为 unix 文件。不幸的是,我不是管理员,所以我无法安装 dos2unix。该tr
方法似乎是唯一有效的方法。
cp script _p4 && tr -d '\r' < _p4 > script && rm _p4
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来做到这一点?我真的很难记住这个或寻找这个。