据我所知,确定我们echo $0在shell中使用的当前shell。相反,我希望我的脚本检查它正在运行的 shell。所以,我尝试$0在脚本中打印,它返回了它应该的脚本名称。所以,我的问题是如何找到我的脚本在运行时运行在哪个 shell 中?
我有一个空目录。我正在使用以下命令查看该目录的内容。
ls -lart
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下。
total 12
drwxr-xr-x 5 root root 4096 Oct 2 12:26 ..
drwxr-xr-x 2 apx aim 4096 Nov 29 18:40 .
Run Code Online (Sandbox Code Playgroud)
我在此目录中没有任何文件,那么这里 ( total 12) 中的12 数是多少?
今天我glance在办公室使用工具监控CPU利用率。当我glance从终端运行时,命令会清除屏幕,完成所有工作后,当我退出终端时,之前的提示仍然在我的屏幕上。我的意思是我可以看到前面的所有行。我的问题是这种清除屏幕的效果是如何实现的。如果他们使用了类似的命令clear,它应该清除了整个屏幕,他们是如何设法取回所有以前的提示的?我想为我的一些脚本实现相同的功能。
同样使用vi命令时,屏幕被完全占用,退出后,我们也可以查看以前的提示。
我正在尝试使用awk以,.分隔的行中的各个列打印变量 。我要打印的列和模式存储在另一个变量中b。图案a和印刷图案b如下:
a='15986327,415532694,850257614,875121642,20140819'
b='$1","$2","$4'
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得如下输出。
15986327,415532694,875121642
Run Code Online (Sandbox Code Playgroud)
我正在尝试b使用-vswitch将模式传递给 awk,但不确定如何在printinside 中使用它awk。尝试了下面的命令,但这不是我想要的输出。
echo $a |awk -v ba="${b}" -F"," '{print ba}'
$1","$2","$4
echo $a |awk -v ba="${b}" -F"," '{print $ba}'
15986327,415532694,850257614,875121642,20140819
Run Code Online (Sandbox Code Playgroud) 我在 Unix 上有一个二进制文件,它在执行时要求用户输入。这个二进制文件的输入是手动给出的。我想自动化这个过程,因为我已经知道输入了。我无法修改二进制文件。我怎样才能做到这一点 ?这是否可以通过 shell 脚本甚至ant目标实现?
我有以下内容的文件。
/ABC/RTE/AD_900_VOP_123/OPP
/ABC/RTE/TRE/AD_900_VOP_145/BBB
/ABC/RTE/AN_900_VFP_124/FBF
/ABC/RTE/HD_900_FOP_153/WEW
/ABD/RDV/AD_900_VOP_123/OPP
/ABC/RTE/WD_900_VOP_123/GRR/TRD
/ABC/RTE/RTD/AR_900_VOP_443/SDD
Run Code Online (Sandbox Code Playgroud)
如何在此文件上使用正则表达式,以便获得输出,例如
AD_900_VOP_123
AD_900_VOP_145
AN_900_VFP_124
HD_900_FOP_153
AD_900_VOP_123
WD_900_VOP_123
AR_900_VOP_443
Run Code Online (Sandbox Code Playgroud) 我只想删除字符串中第一次出现的字符。
例子:
echo "B123_BACK" | tr -d 'B'
Run Code Online (Sandbox Code Playgroud)
这导致输出:
123_ACK
Run Code Online (Sandbox Code Playgroud)
如何只删除第一次出现的字符,'B'以便输出看起来像
123_BACK
Run Code Online (Sandbox Code Playgroud) 如何使用 修复shell 中输出字符串的位置printf?
例如,如果我想TEXT-A在从左起第三个位置开始的位置打印文本,并TEXT-B在左起第十一个位置再打印一个文本,如下所示。

在unix shell中打印后如何修改一行。我们可以删除该行并使用\r如下所示再次写入,但是如何覆盖现有行而不完全删除它并获得如下预期输出中的输出。
命令:
printf "12345";printf "\r67";
Run Code Online (Sandbox Code Playgroud)
输出:
67
Run Code Online (Sandbox Code Playgroud)
预期产出
67345
Run Code Online (Sandbox Code Playgroud) 我的脚本中有一个 echo 语句,如下所示:
echo -ne "Check Script";
Run Code Online (Sandbox Code Playgroud)
我期待它打印
Check Script
Run Code Online (Sandbox Code Playgroud)
但我得到以下输出
-ne Check Script
Run Code Online (Sandbox Code Playgroud)
但是当我在其他机器上运行相同的脚本时,我得到了预期的输出。什么可能是机器特定的变量或属性,因为脚本的行为不同。
我正在使用以下命令检查我的家庭目录中的磁盘使用情况。
du -sk * | sort -n
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
273240 AQP
707720 oradiag
3176872 J2EEServer
23628720 var
100000910
Run Code Online (Sandbox Code Playgroud)
我得到一个大小为 100000910 的目录,最后一行没有名字。如何访问/删除主目录中的这个幽灵目录。
我正在尝试从文件中读取用户和服务器详细信息tempo.txt,然后使用另一个脚本检查该 unix 帐户上文件系统的磁盘空间使用情况server_disk_space.sh。但我无法弄清楚为什么 while 循环仅适用于第一行和 for 循环工作正常。请帮助我理解这一点。
使用while循环
#!/usr/bin/ksh
while read line
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done<tempo.txt
Run Code Online (Sandbox Code Playgroud)
输出
8
Run Code Online (Sandbox Code Playgroud)
使用 for 循环
#!/usr/bin/ksh
for line in $(cat tempo.txt)
do
r1=`echo $line | cut -d"#" -f1`;
r2=`echo $line | cut -d"#" -f2`;
apx_server_disk_space.sh $r2 $r1
done
Run Code Online (Sandbox Code Playgroud)
输出
8
23
54
89
12
Run Code Online (Sandbox Code Playgroud)
的内容 server_disk_space.sh
#!/usr/bin/ksh
user=$1
server=$2
count=`ssh ${user}@${server} "df -h ."`
echo ${count} | …Run Code Online (Sandbox Code Playgroud) 我试图使用 tput 为我的脚本使用不同的屏幕缓冲区。下面是我正在运行的小脚本。
tput smcup
clear
dialog --yesno "Do you want to continue?" 0 0
rc=$?
clear
tput rmcup
if [ "${rc}" == "0" ]; then
echo Yes
else
echo No
fi
Run Code Online (Sandbox Code Playgroud)
脚本执行完成后,屏幕上有一个空白部分(如下图所示),它等于运行脚本前提示占用的行数。理想情况下tput应该切换到第二个屏幕缓冲区,执行后应该已经回到第一个屏幕缓冲区。
脚本切换到第二个屏幕,但返回后它留下了一个不应该存在的空白区域。
