小编g4u*_*r4v的帖子

在运行时确定脚本中的 shell

据我所知,确定我们echo $0在shell中使用的当前shell。相反,我希望我的脚本检查它正在运行的 shell。所以,我尝试$0在脚本中打印,它返回了它应该的脚本名称。所以,我的问题是如何找到我的脚本在运行时运行在哪个 shell 中?

linux shell-script

34
推荐指数
4
解决办法
2万
查看次数

“ls”命令的输出中的“total”是什么?

我有一个空目录。我正在使用以下命令查看该目录的内容。

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 数是多少?

ls

13
推荐指数
2
解决办法
2万
查看次数

清除脚本中的全屏并在退出脚本后获得之前的提示

今天我glance在办公室使用工具监控CPU利用率。当我glance从终端运行时,命令会清除屏幕,完成所有工作后,当我退出终端时,之前的提示仍然在我的屏幕上。我的意思是我可以看到前面的所有行。我的问题是这种清除屏幕的效果是如何实现的。如果他们使用了类似的命令clear,它应该清除了整个屏幕,他们是如何设法取回所有以前的提示的?我想为我的一些脚本实现相同的功能。

同样使用vi命令时,屏幕被完全占用,退出后,我们也可以查看以前的提示。

command

7
推荐指数
1
解决办法
640
查看次数

将打印模式作为变量传递给 awk

我正在尝试使用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)

shell ksh awk

5
推荐指数
1
解决办法
1万
查看次数

自动输入程序到二进制文件

我在 Unix 上有一个二进制文件,它在执行时要求用户输入。这个二进制文件的输入是手动给出的。我想自动化这个过程,因为我已经知道输入了。我无法修改二进制文件。我怎样才能做到这一点 ?这是否可以通过 shell 脚本甚至ant目标实现?

scripting input

4
推荐指数
1
解决办法
2299
查看次数

在 Unix 文件上使用正则表达式提取子字符串

我有以下内容的文件。

/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)

grep sed awk regular-expression

4
推荐指数
1
解决办法
2万
查看次数

使用 tr 仅删除第一次出现的字符

我只想删除字符串中第一次出现的字符。

例子:

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)

tr

4
推荐指数
1
解决办法
1万
查看次数

在 printf 中设置列​​位置

如何使用 修复shell 中输出字符串的位置printf?

例如,如果我想TEXT-A在从左起第三个位置开始的位置打印文本,并TEXT-B在左起第十一个位置再打印一个文本,如下所示。 在此处输入图片说明

printf

4
推荐指数
1
解决办法
4928
查看次数

打印后覆盖 unix shell 中的行

在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)

shell ksh printf

4
推荐指数
1
解决办法
5578
查看次数

我的 echo 命令不接受开关(echo -n 或 echo -e)

我的脚本中有一个 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)

但是当我在其他机器上运行相同的脚本时,我得到了预期的输出。什么可能是机器特定的变量或属性,因为脚本的行为不同。

shell echo

2
推荐指数
1
解决办法
1174
查看次数

主目录中的 Ghost 目录

我正在使用以下命令检查我的家庭目录中的磁盘使用情况。

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 的目录,最后一行没有名字。如何访问/删除主目录中的这个幽灵目录。

directory disk-usage

2
推荐指数
1
解决办法
1025
查看次数

为什么while循环和for循环的行为不同?

我正在尝试从文件中读取用户和服务器详细信息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)

shell io-redirection input for

2
推荐指数
1
解决办法
3941
查看次数

屏幕缓冲区和对话框

我试图使用 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应该切换到第二个屏幕缓冲区,执行后应该已经回到第一个屏幕缓冲区。 脚本切换到第二个屏幕,但返回后它留下了一个不应该存在的空白区域。

在此处输入图片说明

run-dialog tput dialog

2
推荐指数
1
解决办法
1892
查看次数