shell 常用语句2

一、小括号( )
1)作为局部变量作用符号
#!/bin/bash
a=123
( a=321; )
echo "$a"    #a的值为123而不是321,因为括号将判断为局部变量
2)初始化数组
#!/bin/bash
arr=(1 4 5 7 9 21)
echo ${arr[3]}    # get a value of arr  7

二、大括号 { }
1).文件名扩展
复制 t.txt 的内容到 t.back 中
$ vim test22.sh

输入代码:
#!/bin/bash
if [ ! -w 't.txt' ];
then
    touch t.txt
fi
echo 'test text' >> t.txt
cp t.{txt,back}

注意: 在大括号中,不允许有空白,除非这个空白被引用或转义。
2).代码块
代码块,又被称为内部组,这个结构事实上创建了一个匿名函数(一个没有名字的函数)。然而,与“标准”函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的。
$ vim test23.sh

输入代码:
#!/bin/bash
a=123
{ a=321; }
echo "a = $a"

运行代码:
$ bash test23.sh
a = 321

变量 a 的值被更改了。

三、中括号[ ]
1.条件测试
条件测试表达式放在[ ]中。下列练习中的-lt (less than)表示小于号。
$ vim test24.sh

输入代码:
#!/bin/bash
a=5
if [ $a -lt 10 ]
then
    echo "a: $a"
else
    echo 'a>10'
fi

运行代码:
$ bash test24.sh
a: 5

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

输入代码:
#!/bin/bash
arr=(12 22 32)
arr[0]=10
echo ${arr[0]}

运行代码:
$ bash test25.sh
10

四、尖括号 < 和 >
重定向
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 不存在的话,将会被创建。

nohup  spark-sql --master yarn --queue $queue --executor-memory 40G --driver-memory 10G --num-executors 100 --executor-cores 16 -hiveconf yesterday=$yestertoday  -f update-table.hql > log/$yestertoday-run-update.log  2>&1 &
可以修改为
nohup  spark-sql --master yarn --queue $queue --executor-memory 40G --driver-memory 10G --num-executors 100 --executor-cores 16 -hiveconf yesterday=$yestertoday  -f update-table.hql &> log/$yestertoday-run-update.log  &
nohup     &   放到后台运行

对于&1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
 2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了  log/$yestertoday-run-update.log。那么标准错误也会输出到/ log/$yestertoday-run-update.log
五、竖线  |
管道
分析前边命令的输出,并将输出作为后边命令的输入。这是一种产生命令链的好方法。
$ vim test26.sh

输入代码:
#!/bin/bash
tr 'a-z' 'A-Z'  #小写字母替换成为大写字母
exit 0

现在让我们输送ls -l的输出到一个脚本中:

$ ls -l |  sh test26.sh  #   ls -l输出当前文件夹下的所有文件和问价夹(详细信息) 等价于 ll
= ll  |  sh test26.sh

输出的内容均变为了大写字母。

六、破折号 -
1.选项,前缀
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
在所有的命令内如果想使用选项参数的话,前边都要加上“-”。


2.用于重定向stdin或stdout
七、波浪号(~~ 表示 home 目录

 

posted @ 2021-07-20 08:40  刘凯_tju  阅读(44)  评论(0编辑  收藏  举报