Shell脚本杂记

2019-08-07  本文已影响0人  rgcyc

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 是一个数字,表示第几个参数。例如,第一个参数是1,第二个参数是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

有两个地方需要注意:

  1. h*不需要使用引号括起来,使用引号括起来是直接做相等比较
  2. 比较语句使用双中括号括起来,而不是使用单中括号

=~正则比较

str="hello"
if [[ "$str" =~ ^he.* ]]; then
    echo "yes"
fi

使用正则匹配字符串的开头字符需要注意:

  1. he:不要使用he,这里的*号表示e字符0到多个,即h,以及heeee都是测试通过的
  2. he.*:这里只允许包含he的字符串通过测试
  3. ^he.*:这个表示是以he开头的字符串通过检测
上一篇下一篇

猜你喜欢

热点阅读