这篇文章想整理一下自己看到和用到的一些bash方面的技巧,当然,这是一个积累的过程,以后我会慢慢更新。也欢迎大家给出意见,或分享自己的一些技巧。
1、取字符串长度
bash中的变量都被当作字符串使用,故取字符串的长度很重要,可使用"#"来获取字符串的长度,如下所示:
var=1234567890
echo ${#var}
输出结果为"10",一定要加大括号"{ }",否则会出错,输出"0val"。
2、查看当前的shell版本
可用如下命名获取当前使用的shell版本:
echo $SHELL
echo $0
上面两条命令分别输出"/bin/bash"、"-bash",即为年当前使用的shell版本。
常用的shell版本有:
- /bin/sh:已经被/bin/bash所取代
- /bin/bash:即linux默认的bash
- /bin/ksh:即Komshell,由AT & Bell lab 发展出来,兼容与bash
- bin/tcsh:整合 C Shell,提供了更多的功能
- bin/csh:已经被/bin/tcsh所取代
- /bin/zsh:基于ksh发展出来的,功能更强大的bash
若要在你的linux系统上合法使用这些bash,则必须要将这些shell的版本写入到配置文件"/etc/shells"中。
3、检查用户是否为超级用户
可以通过环境变量UID来检查一个用户是否为超级用户(root),超级用户的UID为0,如下所示:
1 if [ $UID -ne 0 ]; then
2 echo "Not root user. Please run as root"
3 else
4 echo "Root user"
5 fi
4、文件编码的转换
很多朋友可能会遇到这样的问题,从网上拷贝或下载了一个bash脚本到你的Windows机器上,让后再上传到linux服务器上,却发现脚本无法运行,而且会提示一些莫名其妙的错误。其实这及有可能是编码导致的问题。在linux下,一条指令开始执行的判断依据是[Enter],即我们键入回车符指令才开始执行。Linux下的 Enter 为 LF 符号,而Windows下的 Enter 是 CRLF 符号,即多了一个"^M"的符号(可用"cat -A demo.sh"显示出来)。可以通过指令"dos2unix"和"unix2dos"两个指令来转换文件的编码,如下所示:
1 # 将Windows下的断行(Enter)转换为linux下的断行
2 dos2unix oldfile.sh newfile.sh
3 # 将Linux下的断行(Enter)转换为Windows下的断行
4 unix2dos oldfile.sh newfile.sh
另外,你还可能遇见过这样的问题,在Windows下显示正常的文件在linux下会出现中文乱码,这其实是中文编码格式的问题。Windows下的中文编码为gbk,linux下的中文编码为utf8,可以在linux下通过iconv命令来转换,如下所示:
iconv -f gbk -t utf8 file.sh
如此,file.sh中的中文即可正确显示了。但原来的file.sh已经被覆盖,若要保留原来的文件,可执行如下命令:
iconv -f gbk -t utf8 file.sh -o newfile.sh
newfile.sh就是没有中文乱码的文件。
5、Bash中的数学操作
在bash中可以用let、(( ))和[ ] 执行基本的算术操作,而在进行高级高作时,expr和bc这两个工具也非常有用。如下:
1 #!/bin/bash
2
3 no1=4
4 no2=5
5
6 ############################################
7 # let 方法,使用时,变量名前不需要再添加$
8 # no1和no2相加
9 let result=no1+no2
10 echo $result # 9
11
12 # no1自加和自减的三种方法
13 let no1=no1+1
14 let no1+=1
15 let no1++
16 echo $no1 # 7
17
18 let no1=no1-1
19 let no1-=1
20 let no1--
21 echo $no1 # 4
22
23 ############################################
24 # [ ] 和 (( )) 方法,使用时,变量名可以加$,也可以不加$
25 result=$[ no1 + no2 ]
26 echo $result # 9
27 result=$[ $no1 + $no2 ]
28 echo $result # 9
29
30 result=$(( no1 + no2 ))
31 echo $result # 9
32 result=$(( $no1 + $no2 ))
33 echo $result # 9
34
35 ############################################
36 # expr 方法,使用时,变量名必须加$
37 result=`expr 3 + 4`
38 echo $result # 7
39 result=$(expr $no1 + $no2)
40 echo $result # 9
[ ] 和 (( )) 中的变量与运算符之间可以有空格,也可以没有空格,为个人习惯用空格分割开(受C/C++的毒害太深了)。另外,用expr时,并不是单引号,而是反引号,即有"~"的按键,切记!
以上这些都是整数运算,同过bc工具可以做浮点数运算和更高级的运算,只是使用方法有所不同,如下:
原文链接: https://www.cnblogs.com/myw31415926/archive/2013/03/15/2960647.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/80765
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!