标签: ksh

如果目录尚不存在,如何mkdir?

我正在编写一个shell脚本,在AIX上的KornShell(ksh)下运行.我想使用该mkdir命令创建一个目录.但目录可能已经存在,在这种情况下我不想做任何事情.因此,我想测试以查看该目录不存在,或者抑制在mkdir尝试创建现有目录时抛出的"File exists"错误.

有关如何最好地做到这一点的任何想法?

shell scripting aix ksh mkdir

1784
推荐指数
16
解决办法
104万
查看次数

shell编程中$(command)和`command`有什么区别?

要将命令的输出存储为sh/ksh/bash中的变量,您可以执行任一操作

var=$(command)
Run Code Online (Sandbox Code Playgroud)

要么

var=`command`
Run Code Online (Sandbox Code Playgroud)

两种方法之间有什么区别?

bash shell ksh sh

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

从UNIX shell脚本中的列表中选择唯一值或不同值

我有一个ksh脚本,它返回一长串值,换行符分隔,我想只看到唯一/不同的值.有可能这样做吗?

例如,假设我的输出是目录中的文件后缀:

tar
gz
java
gz
java
tar
class
class
Run Code Online (Sandbox Code Playgroud)

我希望看到如下列表:

tar
gz
java
class
Run Code Online (Sandbox Code Playgroud)

bash ksh unique distinct sh

224
推荐指数
6
解决办法
28万
查看次数

如何检测脚本是否来源

我有一个脚本,exit如果它被采购我不希望它调用.

我想过检查是否$0 == bash但如果脚本来自另一个脚本,或者如果用户从不同的shell中获取它,则会出现问题ksh.

是否有可靠的方法来检测脚本是否来源?

bash ksh

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

如何从命令输出中获取第二列?

我的命令输出类似于:

1540 "A B"
   6 "C"
 119 "D"
Run Code Online (Sandbox Code Playgroud)

第一列始终是数字,后跟空格,然后是双引号字符串.

我的目的是仅获得第二列,例如:

"A B"
"C"
"D"
Run Code Online (Sandbox Code Playgroud)

我打算用它<some_command> | awk '{print $2}'来完成这个.但问题是,第二列中的某些值包含空格,这恰好是分隔awk字段的默认分隔符.因此,输出搞砸了:

"A
"C"
"D"
Run Code Online (Sandbox Code Playgroud)

如何干净地获得第二列的值(带配对的引号)?

shell awk ksh

131
推荐指数
6
解决办法
29万
查看次数

当我们在美元符号和括号中放入一个命令时,它在shell中意味着什么:$(command)

我只是想了解shell中的以下代码行.它用于获取当前工作目录.我知道$(variable)名称返回变量名称中的值,但$(command)应该返回什么?它在执行命令后返回值吗?在这种情况下,我们可以`用来执行命令.

CWD="$(cd "$(dirname $0)"; pwd)"
Run Code Online (Sandbox Code Playgroud)

在不同版本的shell中也可以从以下代码行获取相同的输出

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)

我无法理解的含义$(cd..$(dirname.

有人可以帮我弄清楚这个命令是如何执行的吗?

bash shell terminal ksh sh

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

如何逐行合并两个文件

我有两个文件(file1.txtfile2.txt),文件只是示例.

如何合并这两个文件,以便创建文件 - merge_files.txt作为示例3

我现在写的是ksh脚本,所以可以用ksh,awk,sed,perl one liner等完成合并

背景 - 为什么我需要合并文件:我的目标是将OLD文件(存在于第一个字段中)重命名为NEW文件(存在于第二个字段中),

例1

more file1.txt

/etc/port1-192.9.200.1-255.555.255.0
/etc/port2-192.9.200.1-255.555.255.0
/etc/port3-192.9.200.1-255.555.255.0
/etc/port4-192.9.200.1-255.555.255.0
/etc/port5-192.9.200.1-255.555.255.0
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

例题

more file2.txt

/etc/port1-192.90.2.1-255.555.0.0
/etc/port2-192.90.2.1-255.555.0.0
/etc/port3-192.90.2.1-255.555.0.0
/etc/port4-192.90.2.1-255.555.0.0
/etc/port5-192.90.2.1-255.555.0.0
.
.
.
.
Run Code Online (Sandbox Code Playgroud)

示例3

 more merge_files.txt



 /etc/port1-192.9.200.1-255.555.255.0  /etc/port1-192.90.2.1-255.555.0.0
 /etc/port2-192.9.200.1-255.555.255.0  /etc/port2-192.90.2.1-255.555.0.0
 /etc/port3-192.9.200.1-255.555.255.0  /etc/port3-192.90.2.1-255.555.0.0
 /etc/port4-192.9.200.1-255.555.255.0  /etc/port4-192.90.2.1-255.555.0.0
 /etc/port5-192.9.200.1-255.555.255.0  /etc/port5-192.90.2.1-255.555.0.0
 .
 .
 .
 .
 .
Run Code Online (Sandbox Code Playgroud)

example4(merge_files.txt结构)

 first field                           second field

 OLD file                              NEW file
Run Code Online (Sandbox Code Playgroud)

linux perl awk ksh sed

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

Bash或KornShell(ksh)?

我不是*nix的新手,不过最近我在提示时花了很多时间.我的问题是使用KornShell(ksh)或Bash Shell有什么好处?使用其中一个的陷阱在哪里?

希望从用户的角度理解,而不是纯粹的脚本.

unix bash shell scripting ksh

60
推荐指数
7
解决办法
10万
查看次数

如何找到可以在linux命令行上的任何位置的文件/目录?

理想情况下,我可以使用像这样的程序

find [file or directory name]
Run Code Online (Sandbox Code Playgroud)

报告具有匹配文件名/目录的路径.不幸的是,这似乎只检查当前目录,而不是整个文件夹.

我也尝试过找到哪个,但是没有找到文件,即使我知道它在某个地方的计算机上.

linux ksh find locate which

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

在bash/ksh中获取命令的退出代码

我想写这样的代码:

command="some command"

safeRunCommand $command

safeRunCommand() {
   cmnd=$1

   $($cmnd)

   if [ $? != 0 ]; then
      printf "Error when executing command: '$command'"
      exit $ERROR_CODE
   fi
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码并没有按照我想要的方式运行.哪里弄错了?

unix bash ksh exit

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

标签 统计

ksh ×10

bash ×6

shell ×5

sh ×3

awk ×2

linux ×2

scripting ×2

unix ×2

aix ×1

distinct ×1

exit ×1

find ×1

locate ×1

mkdir ×1

perl ×1

sed ×1

terminal ×1

unique ×1

which ×1