Shell 脚本开发常用命令和知识点汇总(值得收藏,用时只需要Ctrl+F)

1. 跨脚本文件调用

需要在文件的开始加上

sh /dev/xxxxx.sh 

或者

. /dev/xxxxxx.sh


2. $? $# $1 $@ $*的含义

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。

$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体。

以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。


3. 判断语句中常用的知识点

在linux 中 命令执行状态:0 为真,其他为假
第一个条件为假时,第二条件不用再判断,最终结果已经有;

第一个条件为真时,第二条件必须得判断;

逻辑与: && 

逻辑或: || 

逻辑非: !

数值比较符:

-eq           //等于(equal)

-ne           //不等于( not equal)
-gt            //大于( greater than)
-lt            //小于( less than)
-ge            //大于等于( greater or equal)

-le            //小于等于(less or equal)

文件比较符:

-e filename       如果 filename存在,则为真       [  /var/log/syslog ]

-d filename       如果 filename为目录,则为真      [ -d /tmp/mydir ]

-f filename        如果 filename为常规文件,则为真    [ -f /usr/bin/grep ]

-L filename       如果 filename为符号链接,则为真    [ -L /usr/bin/grep ]

-r filename        如果 filename可读,则为真       [ -r /var/log/syslog ]

-w filename       如果 filename可写,则为真       [ -w /var/mytmp.txt ]

-x filename        如果 filename可执行,则为真      [ -L /usr/bin/grep ]

filename1-nt filename2      如果 filename1比 filename2新,则为真 [ /etc/services -nt /etc]

filename1-ot filename2   如果 filename1比 filename2旧,则为真    [ /boot-ot /bzImage ]

字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)

-z string 如果 string长度为零,则为真 [ -z "$myvar" ]

-n string 如果 string长度非零,则为真 [ -n "$myvar" ]

string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three"]

string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]

4. 获取当前时间

ttime=`date +"%Y-%m-%d %H:%M:%S"`


5. 写日志函数

clog(){
    c_time=`date +"%Y-%m-%d %H:%M:%S"`
    echo "${c_time}" | tr -d '\n'
    echo $*

}

需要打印日志调用时:

clog "Hello world!"


6. 返回函数的结果给变量

func(){

echo "Hello world!"

}

var=$(func) 或者 var=`func`


7. EOF的使用



8. sed



9. awk


10. set +e/-e

set -e   # Exit the script if an error happens
脚本A 
set +e   # don't bail out of bash script if the cache doesn't exist
脚本B
set -e   # back to regular "bail out on error" mode
脚本C

在上面这个脚本里面,A  和 C 中的 脚本 执行的时候 如果出现了返回值为非零,整个脚本就会立即退出
如果脚本B中如果出现了返回值为非零将会继续执行下面的脚本C 。

无论是+e还是-e,它只是对后续的脚本起作用,不对前面的脚本和整个脚本文件负责。
值得一说的是set命令的-e参数,linux自带的说明如下:" Exit immediately if a simple command exits with a non-zero status."也就是说,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出。有的人喜欢使用这个参数,是出于保证代码安全性的考虑。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值