Shell脚本杂记

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开头的字符串通过检测
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,601评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,537评论 0 5
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,141评论 0 0
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,926评论 0 10
  • 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shel...
    某人在阅读 2,061评论 0 0