Linux shell脚本攻略(1)

2018-09-14  本文已影响0人  PeterGu

1.获取字符串长度 #  = 之间没有空格

tom=peter

echo $(#tom)

2.获取当前所使用的shell

echo $SHELL 

3.检查是否为超级用户

echo ¥PID   #为0说明是root用户

4.shell进行数学运算

#/bin/bash

nu1=3

nu2=4

let res1=$nu1+$nu2 #注意没有空格 + 之间  ##发现let res1=nu1+nu2 也可以

res2=$((nu1+nu2))

res3=$[ nu1 + nu3 ]   #习惯性 [ ] 有空格,

res4=`expr $nu1 + $nu2`  #注意  + 之间有空格;变量带上$

let nu1-- #自减操作

let nu1++ #自加操作

#以上方法只适合整型,不适合浮点数计算

5.bc  # bc是一个用于数学运算的高级实用工具,可以浮点类型的计算,还有其他功能比方说进制转换等等

a=1.2

echo "3*$a"|bc

b=`echo "$a*3"|bc`  #注意 是  `  而不是单引号(')

echo $b

#小数点保留

echo "scale=3;22/3"|bc

#进制转换

echo "obase=2;3"|bc  #11  二进制输出

echo "obase=10;3"|bc  #十进制输出

#开根 

echo "sqrt(100)"|bc   #10

echo "10^2"|bc  #100

6.重定向

在编写脚本的时候会频繁用到标准输入(stdin)、标准输出(stdout)和标准错误 (stderr)

文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符0、1以及2是系统预留的。

0——stdin (标准输入)。 1 —— stdout(标准输出)。 2 —— stderr(标准错误)。

1)使用大于号将文本保存到文件中:

echo "test1" > 1.txt

2) 使用双大于号将文本追加到文件中:

echo "test2" >> 1.txt  #追加的 test1 不覆盖

可以cat 1.txt 查看

错误信息重定向:

ls + 控制台打印出错误信息

ls + 2>error.txt  #将错误日志存放到error.txt 了

我们在处理一些命令输出的同时还想将其保存下来,以备后用。stdout作为单数据流 (single stream),可以被重定向到文件或是通过管道传入其他程序,但是无法两者兼得。

有一种方法既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为管道中后续 命令的stdin。tee命令从stdin中读取,然后将输入数据重定向到stdout以及一个或多个文件中。

    command | tee FILE1 FILE2 | otherCommand

在下面的代码中,tee命令接收到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin。命令cat -n为从stdin中接收到的每一行数 据前加上行号并将其写入stdout:

例:cat 1.txt | tee out.txt | cat -n   #注意是stdin的,tee只能从stdin中读取,stderr是不行的

默认情况下,tee命令会将文件覆盖,但它提供了一个-a选项,可用于追加内容。$ cat a* | tee -a out.txt | cat –n

例:cat 2.txt | tee -a out.txt | cat -n

重定向操作符(>和>>)可以将输出发送到文件中,而不是终端。>和>>略有差异。尽管两 者都可以将文本重定向到文件,但是前者会先清空文件,然后再写入内容,而后者会将内容追加 到现有文件的尾部。

默认情况下,重定向操作针对的是标准输出。如果想使用特定的文件描述符,你必须将描述 符编号置于操作符之前。

>等同于1>;对于>>来说,情况也类似(即>>等同于1>>)。 处理错误时,来自stderr的输出被倾倒入文件/dev/null中。它会丢弃接收到的任何数据。null设备通常也被称为黑洞,/dev/null是一个特殊的设备文件,因为凡是进入其中的数据都将一去不返。

例: ls + 2> /dev/null

上一篇下一篇

猜你喜欢

热点阅读