美文网首页
Bash之特殊符号下

Bash之特殊符号下

作者: 多啦A梦的时光机_648d | 来源:发表于2020-02-09 16:56 被阅读0次
  -e filename 如果 filename存在,则为真
  -d filename 如果 filename为目录,则为真
  -f filename 如果 filename为常规文件,则为真
  -L filename 如果 filename为符号链接,则为真
  -r filename 如果 filename可读,则为真
  -w filename 如果 filename可写,则为真
  -x filename 如果 filename可执行,则为真
  -s filename 如果文件长度不为0,则为真
  -h filename 如果文件是软链接,则为真
  -n 当串的长度大于0时为真(非空串)
  -z 当串的长度为0时为真(空串)

一:小括号(())

1.命令组

在括号中的命令列表,将会作为一个子 shell 来运行。

在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的。父进程,也就是脚本本身,将不能够读取在子进程中创建的变量,也就是在子shell 中创建的变量。如:

#!/bin/bash

a=123
( a=321; )

echo "$a" #a的值为123而不是321,因为括号将判断为局部变量
$ bash test20.sh
a = 123

在圆括号中 a 变量,更像是一个局部变量。

2. 初始化数组

#!/bin/bash

arr=(1 4 5 7 9 21)
echo ${arr[3]} # get a value of arr
$ bash test21.sh
7

二:大括号

1. 文件扩展名

例如复制 t.txt 的内容到 t.back 中

#!/bin/bash

if [ ! -w 't.txt' ];   ##如果 filename可写,则为真
then
    touch t.txt
fi
echo 'test text' >> t.txt
cp t.{txt,back}   ##文件拓展名

注意: 在大括号中,不允许有空白,除非这个空白被引用或转义

2.代码块

代码块,又被称为内部组,这个结构事实上创建了一个匿名函数(一个没有名字的函数)。然而,与“标准”函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。

#!/bin/bash

a=123
{ a=321; }    ##这里注意和小括号的区别
echo "a = $a"
$ bash test23.sh
a = 321

变量 a 的值被更改了。

三:中括号([])

1.条件测试

条件测试表达式放在[ ]中。下列练习中的-lt (less than)表示小于号。

#!/bin/bash

a=5
if [ $a -lt 10 ]   ##-lt表示小于
then
    echo "a: $a"
else
    echo 'a>=10'
fi

其实双中括号([[ ]])也用作条件测试(判断)

2.数组元素

在一个array结构的上下文中,中括号用来引用数组中每个元素的编号。

#!/bin/bash

arr=(12 22 32)
arr[0]=10
echo ${arr[0]}

四:尖括号(<>)

重定向

test.sh > filename:重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。

test.sh &> filename:重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。

test.sh >&2:重定向 test.sh 的 stdout 到 stderr 中。

test.sh >> filename:把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。

五:竖线(|)

1.管道符

分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。

#!/bin/bash

tr 'a-z' 'A-Z'    ##字符由小写变成大写
exit 0
ls -lh | bash test26.sh  ##所有输出都变为大写
输出大写

六:破折号(-)

1. 选项,前缀

在所有的命令内如果想使用选项参数的话,前边都要加上“-”。

#!/bin/bash

a=5
b=5
if [ "$a" -eq "$b" ]   ##-eq即为等于(equal)
then
    echo "a is equal to b."
fi

2.用于重定向stdin或stdout

下面脚本用于备份最后24小时当前目录下所有修改的文件.

#!/bin/bash

BACKUPFILE=backup-$(date +%m-%d-%Y)
# 在备份文件中嵌入时间.
archive=${1:-$BACKUPFILE}
#  如果在命令行中没有指定备份文件的文件名,
#  那么将默认使用"backup-MM-DD-YYYY.tar.gz".

tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."

exit 0

七:波浪号(~)

目录

~ 表示 home 目录

相关文章

  • Bash之特殊符号下

    一:小括号(()) 1.命令组 在括号中的命令列表,将会作为一个子 shell 来运行。 在括号中的变量,由于是在...

  • bash环境变量的设置

    除了万用字符之外,bash环境中的特殊符号

  • Bash特殊符号

    在编写shellscripts的时候,特殊符号也有其重要的功能。具体描述如下:

  • Bash基础-通配符和特殊符号

    1、通配符(和各大编程语言中的差不多) 2、特殊符号(注意单引号和双引号德区别)

  • bash基础特性第一篇

    1.bash的基础特性之:命令行展开 常用选项 实例 2.bash的基础特性之:命令的执行状态结果 bash通过状...

  • shell基础

    1,bash 自定义变量 变量替换之匹配截取: bash测试 bash判断 条件判断 if if代码返回0表示真,...

  • Mac下iTerm2的显示文件件颜色

    方案① 修改 .bash_profile, 添加如下内容: source .bash_profile 使之生效。再...

  • Mac 修改python 版本

    open ~/.bash_profile 最后执行一下 source ~/.bash_profile

  • Linux之bash

    bash的基础特性之 IO重定向及管理 ] IO重定向: 输入重定向: 管道 bash基础特性之自动补充命令 ba...

  • 配置maven环境

    在terminal下: vim ~/.bash_profile 开发环境配置 source ~/.bash_pro...

网友评论

      本文标题:Bash之特殊符号下

      本文链接:https://www.haomeiwen.com/subject/owtnxhtx.html