bash shell 和我们讨论的命令默认安装在几乎所有的 Linux 发行版上。但是对于 Windows环境则不是这样。幸运的是,有很多在 Windows 系统上运行 Linux 命令和 bash 脚本的方法。我们在这里介绍的四个例子是 Git Bash、Cygwin、Linux 版 Windows 子系统、Windows 命令提示符及 PowerShell。
Git Bash如果你安装了 Git,并包含了 bash 的端口服务,你就可以在 Windows 环境中运行许多标准的 Linux 命令和 bash shell。Git Bash 是本书中给出的示例的首选运行环境,因为它很受欢迎,并且能够运行标准的 Linux 和 bash 命令,也能够调用许多 Windows 本机命令。你可以从 Git 网站下载 Git。安装好之后,你可以在桌面上或文件夹中单击右键,并选择Git Bash 来运行 bash
[root@localhost sec]# type -t if
keyword
[root@localhost sec]# type -t pwd
builtin
[root@localhost sec]# type -t ls
alias
使用 compgen 命令来确定哪些命令、内建指令和关键字对你可用。使用 -c 选项列出命令,-b 选项列出内建指令,-k 选项列出关键字
command -oplions arguments
handywork < data.in > results.out 2>&1
这意味着将 stderr(2)发送到与文件描述符 1(&1)相同的位置。注意,如果没有 & 符号,错误消息将被发送到一个名为1的文件。这种 stdout 和 stderr 的结合是如此常见以至于有一个有用的缩写符号:
handywork < data.in &> results.out
如果你想丢弃标准输出,可以将其重定向到一个特殊的文件/dev/null,如下所示:
handywork < data.in > /dev/null
要查看命令行上的输出并同时将相同的输出重定向到文件,请使用 tee 命令。下面显示的是 handywork 的输出,并保存到
results.out:
handywork < data.in | tee results.out
使用 tee 命令上的 -a 选项将其附加到输出文件中,而不是覆盖写入。| 字符被称为管道。它允许你从一个命令或脚本获取输出,并将其作为输入提供给另一个命令。在本例中,handywork 的输出通过管道输入到 tee 命令中进行进一步处理。
当使用单个大于号重定向输出时,文件将被创建并可能会被截断(也就是,内容会有丢失)。如果你想保存文件中的现有内容,你可以使用双大于号来附加文件,如下所示:
handywork < data.in >> results.out
这将执行 handywork,然后将 stdout 的任何输出附加到文件results.out中,而不会覆盖其现有内容。
类似地,命令行
handywork < data.in &>> results.out
执行 handywork,然后将 stdout 和 stderr 都附加到文件results.out中,而不会覆盖其现有内容
[root@localhost sec]# cat echoparams.sh
#!/bin/bash -
#
# Cybersecurity Ops with bash
# echoparams.sh## Description:
# Demonstrates accessing parameters in bash
#
# Usage:
# ./echoparms.sh <param 1> <param 2> <param 3>
#
echo $#
echo $0
echo $1
echo $2
echo $3
[root@localhost sec]# ./echoparams.sh bash is fun
3
./echoparams.sh
bash
is
fun
#参数的数量($#),脚本的名称$0
[root@localhost sec]# read LXF
lxf is good
[root@localhost sec]# echo $LXF
lxf is good
if [[ -e $FILENAME ]]
then
echo $FILENAME exists
fi
文件测试操作符 使用说明
-d 测试目录是否存在
-e 测试文件是否存在
-r 测试文件是否存在且可读
-w 测试一个文件是否存在并且是可写的
-x 测试一个文件是否存在并可执
if [[ $VAL -lt $MIN ]]
then
echo "value is too small"
fi
数值测试操作符 使用说明
-eq 检验数之间是否相等
-gt 测试一个数字是否大于另一个
-lt 测试一个数字是否小于另一个
i=0
while (( i < 100 ))
do
echo $i
let i++
done