shell编程总结

来源:互联网 发布:mac系统偏好隐藏 编辑:程序博客网 时间:2024/06/05 17:16

shell变量

使用变量,加$

your_name_1="syq"  #定义echo $your_name_1 #使用变量echo ${your_name_1} #加花括号使用变量#加不加花括号都可以,只是让编辑器有识别的边界

只读,readonly

readonly myurl

删除,unset

unset myurl

类型

局部变量,仅在脚本或命令中定义

环境变量,所有shell启动的程序,都能访问环境变量

shell变量,shell程序设置的变量

shell字符串

单引号和双引号的对比

myname="syq"echo "this is my name $myname"#输出this is my name syqecho 'this is my name $myname' #输出this is my name $myname

单引号:

1.单引号中变量无效。2.单引号不能出现双引号

双引号:

1.双引号中变量有效。2.双引号中可以出现转义字符

字符串操作

获取长度

str="abcd"echo ${$str}  #输出4

截取字符串

str="abcd"echo ${str,1,2} #输出bc

查找字符串

str ="woaizhongguo"echo `expr index "str" ai` #输出3

shell数组

赋值

array_name=(1 2 3 4 5)#或者单独赋值array_name[0]=1array_name[0]=2array_name[0]=3

读取

valen=${array_name[1]}#读取所有元素echo ${array_name[@]}

操作

#读取数组长度length=${#array_name[@]}length=${#array_name[*]}#读取某个元素长度lengthn=${#array_name[1]}

shell传递参数

$n

向脚本传递参数,$nn为数字

#!/bin/bashecho "Shell 传递参数实例!";echo "执行的文件名:$0";echo "第一个参数为:$1";echo "第二个参数为:$2";echo "第三个参数为:$3";

#结果:
$ ./test.sh 1 2 3Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3

特殊字符

参数处理

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数。

如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

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

$*$@区别

相同:引用所有参数

不同:如果引用1,2,3,前者相当于引用了 "123"这一个,而后者是"1""2" "3"

#!/bin/bashecho "-- \$* 演示 ---"for i in "$*"; do    echo $idoneecho"-- \$@ 演示 ---"for i in "$@"; do    echo $idone

#输出结果:
$./test.sh 1 2 3-- $* 演示 ---1 2 3-- $@ 演示 ---123

基本运算符

算术

注:a10b20

运算符

说明

举例

+

加法

`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。

关系

只支持数字

注:a10b20

运算符

说明

举例

-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。

布尔

注:a10b20

运算符

说明

举例

!

非运算,表达式为 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。

逻辑

注:a10b20

运算符

说明

举例

&&

逻辑的 AND

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

||

逻辑的 OR

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

字符串运算符

下表列出了常用的字符串运算符,假定变量a 为 "abc",变量 b 为 "efg":

运算符

说明

举例

=

检测两个字符串是否相等,相等返回 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

文件测试运算符

file="/var/test.sh"

操作符

说明

举例

-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。

 

shell流程控制

if判断

if conditionthen    command1     command2    ...    commandN fi

if conditionthen    command1     command2    ...    commandNelse    commandfi

if condition1then    command1elif condition2 then     command2else    commandNfi

for

forvar in item1 item2 ... itemNdo    command1    command2    ...    commandNdone


while

whileconditiondo    commanddone

 

case

echo'输入 1 到 4 之间的数字:'echo '你输入的数字为:'read aNumcase $aNum in    1) echo '你选择了 1'    ;;    2) echo '你选择了 2'    ;;    3) echo '你选择了 3'    ;;    4) echo '你选择了 4'    ;;    *) echo '你没有输入 1 到 4 之间的数字'    ;;esac

shell函数

简单

#!/bin/bashdemoFun(){    echo "这是我的第一个 shell函数!"}echo "-----函数开始执行-----"demoFunecho "-----函数执行完毕-----"#输出结果:-----函数开始执行-----这是我的第一个 shell 函数!-----函数执行完毕-----

 

 

带返回值

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


函数参数

#!/bin/bashfunWithParam(){    echo "第一个参数为 $1!"    echo "第二个参数为 $2!"    echo "第十个参数为 $10 !"    echo "第十个参数为 ${10}!"    echo "第十一个参数为 ${11}!"    echo "参数总数有 $# 个!"    echo "作为一个字符串输出所有参数 $*!"}funWithParam 1 2 3 4 5 6 7 8 9 34 73#输出结果:第一个参数为1 !第二个参数为 2 !第十个参数为 10 !第十个参数为 34 !第十一个参数为 73 !参数总数有 11 个!作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !


0 0
原创粉丝点击