SH脚本入门总结

把学到sh脚本相关知识总结如下:

#!/bin/bash  注明用什么运行

#!/bin/sh 

Chmod +xfilename 使得脚本有权限执行

变量名不需要定义,直接赋值使用双引号,lua脚本和sh脚本都是这样的,也可以使用语句赋值,需要使用单引号。

使用变量的时候需要加上${变量名},括弧是为了让解释器识别变量的边界值,赋值变量的时候不需要加上$。

Readonlyvar 使得var只读

Unsetvar 使得var 删除

Shell变量(shell程序设置的特殊变量),环境变量(所有程序包括shell启动的程序都可以访问环境变量),局部变量(当前脚本有效)。

单引号:单引号中的所有字符原样输出,变量无效

双引号:可以输出变量可以加上转移符

#变量名获得字符串的长度

Shell只支持一维数组

读取数组 &{数组名[下标]},*或者@可以获取数组中的所有元素

# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个元素的长度

lengthn=${#array_name[n]}

shell 只有单行注释#

执行的文件名:$0

第一个参数:$1

第n个参数:$n

传递到脚本的参数的个数:$#

以”$1$2..$n”的形式输出所有的参数$*

脚本运行的最后一个进程的iD:$$

后台运行的最后一个进程的ID:$!

$@ :与$*类似,在被双引号包起来的时候有所不同,”$*” 代表的是一个完整的值和“$@”代表的是所有参数个数个值,虽然这两个其实都是所有的参数。

$- :显示当前SHELL的环境变量,使用的选项,做过的修改什么的

$?:显示最后命令的退出状态。0表示没有错误,其他任何值表示有错误

 

运算符:

`expr 2+ 2`,两数之和,注意是反引号不是单引号,算数表达式之间要有空格

常用的运算方法如下:

假设变量a为10,变量b为20,*前必须加反斜杠\转义下才行

 

 

 

+

加法

`expr $a + $b` 结果为 30

-

减法

`expr $a - $b` 结果为 -10

*

乘法

`expr $a \* $b` 结果为  200

/

除法

`expr $b / $a` 结果为 2

%

取余

`expr $b % $a` 结果为 0

=

赋值

a=$b 将把变量 b 的值赋给 a

==

相等。用于比较两个数字,相同则返回 true

[ $a == $b ] 返回 false

!=

不相等。用于比较两个数字,不相同则返回 true

[ $a != $b ] 返回 true

 

-eq

检测两个数是否相等,相等返回 true

[ $a -eq $b ] 返回 false

-ne

检测两个数是否相等,不相等返回 true

[ $a -ne $b ] 返回 true

-gt

检测左边的数是否大于右边的,如果是,则返回 true

[ $a -gt $b ] 返回 false

-lt

检测左边的数是否小于右边的,如果是,则返回 true

[ $a -lt $b ] 返回 true

-ge

检测左边的数是否大于等于右边的,如果是,则返回 true

[ $a -ge $b ] 返回 false

-le

检测左边的数是否小于等于右边的,如果是,则返回 true

[ $a -le $b ] 返回 true

!

非运算,表达式为 true 则返回 false,否则返回 true

[ ! false ] 返回 true

-o

或运算,有一个表达式为 true 则返回 true

[ $a -lt 20 -o $b -gt 100 ] 返回 true

-a

与运算,两个表达式都为 true 才返回 true

[ $a -lt 20 -a $b -gt 100 ] 返回 false

逻辑运算:

&&

逻辑的 AND

[[ $a -lt 100 && $b -gt 100 ]] 返回 false

||

逻辑的 OR

[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算

=

检测两个字符串是否相等,相等返回 true

[ $a = $b ] 返回 false

!=

检测两个字符串是否相等,不相等返回 true

[ $a != $b ] 返回 true

-z

检测字符串长度是否为0,为0返回 true

[ -z $a ] 返回 false

-n

检测字符串长度是否为0,不为0返回 true

[ -n $a ] 返回 true

str

检测字符串是否为空,不为空返回 true

[ $a ] 返回 true

文件测试运算符

-b file

检测文件是否是块设备文件,如果是,则返回 true

[ -b $file ] 返回 false

-c file

检测文件是否是字符设备文件,如果是,则返回 true

[ -c $file ] 返回 false

-d file

检测文件是否是目录,如果是,则返回 true

[ -d $file ] 返回 false

-f file

检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true

[ -f $file ] 返回 true

-g file

检测文件是否设置了 SGID 位,如果是,则返回 true

[ -g $file ] 返回 false

-k file

检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true

[ -k $file ] 返回 false

-p file

检测文件是否是有名管道,如果是,则返回 true

[ -p $file ] 返回 false

-u file

检测文件是否设置了 SUID 位,如果是,则返回 true

[ -u $file ] 返回 false

-r file

检测文件是否可读,如果是,则返回 true

[ -r $file ] 返回 true

-w file

检测文件是否可写,如果是,则返回 true

[ -w $file ] 返回 true

-x file

检测文件是否可执行,如果是,则返回 true

[ -x $file ] 返回 true

-s file

检测文件是否为空(文件大小是否大于0),不为空返回 true

[ -s $file ] 返回 true

-e file

检测文件(包括目录)是否存在,如果是,则返回 true

[ -e $file ] 返回 true

 

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell变量:

read name

echo “$nameis a input”

显示命令执行结果:echo `date`

显示结果定向至文件:echo “…..” > myfile

Echo 自动换行,printf需要手动换行,printf可以和c语言一样的自定义字符格式

TEST命令

数值测试

-eq

等于则为真

-ne

不等于则为真

-gt

大于则为真

-ge

大于等于则为真

-lt

小于则为真

-le

小于等于则为真

字符串测试

=

等于则为真

!=

不相等则为真

-z 字符串

字符串的长度为零则为真

-n 字符串

字符串的长度不为零则为真

文件测试

-e 文件名

如果文件存在则为真

-r 文件名

如果文件存在且可读则为真

-w 文件名

如果文件存在且可写则为真

-x 文件名

如果文件存在且可执行则为真

-s 文件名

如果文件存在且至少有一个字符则为真

-d 文件名

如果文件存在且为目录则为真

-f 文件名

如果文件存在且为普通文件则为真

-c 文件名

如果文件存在且为字符型特殊文件则为真

-b 文件名

如果文件存在且为块特殊文件则为真

( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '有一个文件存在!'
else
    echo '两个文件都不存在'
fi

SHELL的流程控制

ifcondition then ..else..fi如果else分支没有语句执行,就不要写这个else

elif 代表else if

for var in“….”

whilecondition

do

 …

done

case语句

case  in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2
    command1
    command2
    ...
    commandN
    ;;
esac

break和continue

break直接跳出所有循环,返回到shell提示符

continue 仅仅跳出当前循环,不会跳出所有的循环

 

SHELL函数:

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum  $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

所有函数在使用前必须定义,函数的返回值在调用函数之后可以通过$?获得,所以一般都是先在shell脚本的前面写函数,最后面调用它

 

SHELL的输入输出重定向

command > file

将输出重定向到 file

command < file

将输入重定向到 file

command >> file

将输出以追加的方式重定向到 file

n > file

将文件描述符为 n 的文件重定向到 file

n >> file

将文件描述符为 n 的文件以追加的方式重定向到 file

n >& m

将输出文件 m n 合并。

n <& m

将输入文件 m n 合并。

<< tag

将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

 

输出重定向:将命令的执行结果重定向到文件中

输入重定向:从文件直接获取输入

command << EOF
    document
EOF

将document作为输入传递给command

 

不想输出结果: $ command > /dev/null

 

SHELL文件包含

. filename    source filename   引用这个脚本

 

sh脚本获取命令的执行结果:

var = `cmd`


  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值