Linux shell脚本攻略(1)
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