我试图检查PHONE_TYPE变量是否包含三个有效值之一。
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
Run Code Online (Sandbox Code Playgroud)
上面的代码对我不起作用,所以我尝试了这个:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Run Code Online (Sandbox Code Playgroud)
这种类型的任务有更干净的方法吗?
unset array[0]删除元素但仍然如果我这样做echo ${array[0]}我得到一个空值而且还有其他方法可以做到这一点但是如果数组的元素包含如下空格
array[0]='james young'
array[1]='mary'
array[2]='randy orton'
Run Code Online (Sandbox Code Playgroud)
但这些也无法完成工作
array=${array[@]:1} #removed the 1st element
Run Code Online (Sandbox Code Playgroud)
现在我希望新数组像
array[0]='mary'
array[1]='randy orton'
Run Code Online (Sandbox Code Playgroud)
分配后空格会引起麻烦,实际数组变得像替换一样。
array=(mary randy orton)
Run Code Online (Sandbox Code Playgroud) 我想将我的 shell 脚本转换为二进制可执行文件,以便其他人无法编辑或阅读它。有没有办法将其转换为二进制可执行文件?
这两者有什么区别吗。
[[ $a == z* ]]
Run Code Online (Sandbox Code Playgroud)
和
[ $a == z* ]
Run Code Online (Sandbox Code Playgroud)
我可以举一个例子,他们会有不同的输出吗?
此外, 的工作方式[[ ]]与[ ]?
这是我得到的错误,它失败是因为一个变量的值应该是 2(我使用 a 得到这个select * from tabel)。我在那个变量中得到了空格。
+ 0 !=
2
./setjobs[19]: 0: not found.
Run Code Online (Sandbox Code Playgroud)
如何从该变量中删除所有这些空格或换行符?可以tr,,sed或任何帮助?
这就是我正在做的:
set_jobs_count=$(echo "set heading off;
select count(*) from oppar_db
where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \
sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME)
Run Code Online (Sandbox Code Playgroud)
这按建议工作:
| sed 's/[[:space:]]//g'
Run Code Online (Sandbox Code Playgroud)
但我仍然获得一个值,如:
set_jobs_count=
2
Run Code Online (Sandbox Code Playgroud) UNIX:完整参考,第二版,Kenneth H. Rosen 等人。
登录后可以使用shell的名称作为命令启动另一个shell;例如,要启动 Korn shell,您可以在命令提示符下键入 ksh。这种类型的 shell 不是登录 shell,您不必再次登录即可使用它,但它仍然是一个交互式 shell,这意味着您通过键入命令与 shell 进行交互(而不是使用 shell 来运行一个脚本,如第 20 章所述)。当您使用图形界面时,在终端窗口中运行的 shell 实例也是交互式非登录 shell。当您启动非登录 shell 时,它不会读取您的 .profile、.bash_profile 或 .login 文件(或您的 .logout 文件),但它仍会读取第二个 shell 配置文件(例如 .bashrc)。这意味着您可以测试对 .
我正在浏览以上几行,但我不明白交互式 shell 的含义。如果我使用终端,.profile 是不是真的没有被读取?
此外,当您说 bourne 不是交互式 shell 而 bash/csh 是交互式 shell 时,这意味着什么?
这是我用来列出一些文件的命令:
find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \;
-rw-r--r-- 1 qa1wrk15 test 1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys
-rw-r--r-- 1 qa1wrk15 test 1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys
Run Code Online (Sandbox Code Playgroud)
等等。
现在我想通过总结第 5 列来计算这些文件的总大小。我想使用awk, 来做到这一点,所以我在特定目录中测试了以下内容
>ls -lrt | awk `{ print $1 }`
ksh: syntax error at line 1 : `{' unmatched
Run Code Online (Sandbox Code Playgroud)
我不明白有什么问题,为什么这个语法错误。
我想试试
ls -lrt | awk …Run Code Online (Sandbox Code Playgroud) #!/bin/bash
function back()
{
sleep $1
exit $2
}
back $1 $2 &
b=$!
if `wait $!`;then
echo success
else
echo failure
fi
Run Code Online (Sandbox Code Playgroud)
bash-3.00# ./back 300 0
failure
bash-3.00# ./back 300 1
failure
Run Code Online (Sandbox Code Playgroud)
success当我发送 0 时,我期待退出状态,但我仍然收到failure.
此外,wait不等待 300 秒。相反,我立即收到了消息。我假设$!是$$我脚本中的直接子代。不是吗?
是否可以捕获等待的退出状态exit_status=$(wait $!)?
if ! ((exit_status));then
echo sucess
else
failure
fi
Run Code Online (Sandbox Code Playgroud) 我刚刚看到免费红帽企业 Linux的常见问题解答,看起来他们正在为个人用户免费提供红帽企业 Linux (RHEL),因为 CentOS 多年来一直是我的桌面,现在它将在2021. 我想知道作为个人,我有什么选择可以继续使用 CentOS/Red Hat 作为我的桌面。
RHEL 是 Red Hat(面向个人用户的免费产品)的 CentOS 8 的替代品吗?安装这个免费的 Red Hat 比安装 CentOS Stream 更好吗?
使用哪种$*或哪种$@更好(在数组语法、命令行参数等中)以避免代码中的任何错误/问题?或者它没有任何区别?