1.判断字符串是否为空
#!/bin/sh
STRING=
if [ -z "$STRING" ]; then
echo "STRING is empty"
fi
if [ -n "$STRING" ]; then
echo "STRING is not empty"
fi
root@james:~# ./zerostring.sh
STRING is empty
2.函数返回字符串
Shell的函数默认只支持返回状态码(整数),不支持字符串。如果想要返回字符串可传入变量,在函数中修改变量为想要返回的值。
#!/bin/bash
set -x
function pass_back_a_string() {
eval "$1='foo bar rab oof'"
}
return_var=''
pass_back_a_string return_var
echo $return_var
3. if...elif...fi 语句
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
4.sed正则提取字符串
sed命令格式:
# sed 's/oldValue/newValue/g'
提取字符串:
# echo here365test | sed 's/.*ere\([0-9]*\).*/\1/g'
> 365
s表示替换,\1表示用第一个括号里面的内容替换整个字符串,sed支持*,不支持?、+,不能用\d之类,正则支持有限。
5.shell特殊变量
变量 含义
1.$0
当前脚本的文件名
2.$n
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是2。
3.$#
传递给脚本或函数的参数个数。
4.$*
传递给脚本或函数的所有参数。
5.$@
传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。
6.$?
上个命令的退出状态,或函数的返回值。
7.$$
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
http://c.biancheng.net/cpp/view/2739.html
6.zip 压缩、解压缩文件
# zip -r filename.zip filename // 压缩单个目录命令
# zip all.zip *.jpg // 这条命令是将所有 .jpg 的文件压缩成一个 zip 包
# unzip all.zip // 这条命令是将 all.zip 中的所有文件解压出来
7.rar压缩、解压缩文件
安装rar
# wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz
# tar zxvf rarlinux-3.8.0.tar.gz
# cd rar
# make
# make install
压缩、解压缩
# rar a all.rar *.jpg
# unrar e all.rar
8.软链接
# ln -s 源文件 目标文件。
9.获取文件后缀名
file=$1
if [ "${file##*.}"x = "css"x ]||[ "${file##*.}"x = "js"x ];then
do something
fi
注意:
1> 提取文件后缀名: ${file##*.}
##是贪婪操作符,从左至右匹配,匹配到最右边的.号,移除包含.号的左边内容。
这里可以参考 http://www.1987.name/264.html
2> 是=,而且其两边有空格,如果没有空格,会报错
3> 多加了x,是为了防止字符串为空时报错。
这里可以参考http://qubaoquan.blog.51cto.com/1246748/292461
9.计算时间差
#!/bin/bash
START=$(date +%s)
END=$(date +%s)
DIFF=$(( $END - $START ))
10.检查字符串是否以某些字符开头
==比较
str="hello"
if [[ $str == h* ]];
then
echo 'yes'
fi
有两个地方需要注意:
- h*不需要使用引号括起来,使用引号括起来是直接做相等比较
- 比较语句使用双中括号括起来,而不是使用单中括号
=~正则比较
str="hello"
if [[ "$str" =~ ^he.* ]]; then
echo "yes"
fi
使用正则匹配字符串的开头字符需要注意:
- he:不要使用he,这里的*号表示e字符0到多个,即h,以及heeee都是测试通过的
- he.*:这里只允许包含he的字符串通过测试
- ^he.*:这个表示是以he开头的字符串通过检测
网友评论