shell编程要点

1.name=”” ;变量的赋值在=两边不能存在空格
2.可以使用的变量 $1 代表第一个参数,同理$2,$3分别代表之后的多个
$#:代表共有多少个参数
bash中提供了一个变量 “$@”代表所有的参数
for thing in “$@”;do
echo $thing;
done
总介:
$0 相当于C语言main函数的argv[0]
$1、$2… 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]…
$# 相当于C语言main函数的argc – 1,注意这里的#后面不表示注释 参数个数
$@ 表示参数列表”$1″ “$2″ …,例如可以用在for循环中的in后面。
$? 上一条命令的Exit Status
$$ 当前Shell的进程号

3.if 的使用特别需要主要
if [ $# -gt 4];then

fi;

if 和 [ 之间一定要有空格,[]之内的参数也需要有空格

4.对于字符串的复制
var1=””
var1=”$var1 new”
这个时候得到的就是新的值

5.引号(单引号和双引号)可以防止通配符*的扩展:
若是目录下存在一些jpg格式的图片:aa.jpg , bb.jpg
echo “*.jpg”
echo ‘*.jpg’
得到的结果就是:
*.jpg
*.jpg

6.其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展:
echo $SHELL
echo “$shell”
echo ‘$shell’
得到的结果是;
/bin/sh
/bin/sh
$shell

7.脚本的调试
最简单的调试方法当然是使用echo命令。你可以在任何怀疑出错的地方用echo打印变量值,这也是大部分shell程序员花费80%的时间用于调试的原因。Shell脚本的好处在于无需重新编译,而插入一个echo命令也不需要多少时间。

sh -n your_script
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误,这个命令会返回所有语法错误。

sh -v strangescript
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
sh -x strangescript
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
8.不同的运算符

运算符
描述
示例
文件比较运算符
-e filename
如果 filename存在,则为真
[ -e /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新,则为真
[ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2
如果 filename1比 filename2旧,则为真
[ /boot/bzImage -ot arch/i386/boot/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” ]
算术比较运算符
num1-eq num2
等于
[ 3 -eq $mynum ]
num1-ne num2
不等于
[ 3 -ne $mynum ]
num1-lt num2
小于
[ 3 -lt $mynum ]
num1-le num2
小于或等于
[ 3 -le $mynum ]
num1-gt num2
大于
[ 3 -gt $mynum ]
num1-ge num2
大于或等于
[ 3 -ge $mynum ]

 
一定要注意 字符串比较用
if [ “$myvar” = “foo bar coo” ]
若是不加“”的话,如果传进来的 参数是 foo bar coo 那么就会变成

if [ foo bar coo = “foo bar coo” ]

就不会进入该分支进行执行了。

10.函数的使用

vi f2.sh;

#!/bin/bash

fun2 () {

_var1=$1; #这里的$1就是传入的第一个参数,shell脚本中参数都是在函数命令后面介入,不是在括号中传入的风格

echo $_var1;
}

fun2 haha

sh f2.sh
那么输出的结果就是
haha

 

作者: inter12

在这苦短的人生中,追求点自己的简单快乐

发表评论

电子邮件地址不会被公开。 必填项已用*标注