[b]因为工作需要写一个小的shell脚本,很多年前写过,但是后来又把语法全都忘记了,趁这次机会重新学了一遍,找了些资料。先记下来,免的以后又忘记了
1.name="" ;变量的赋值在=两边不能存在空格
2.可以使用的变量 $1 代表第一个参数,同理$2,$3分别代表之后的多个
$#:代表共有多少个参数
bash中提供了一个变量 "$@"代表所有的参数
for thing in "$@";do
echo $thing;
done
总介:
3.if 的使用特别需要主要
[b]if 和 [ 之间一定要有空格,[]之内的参数也需要有空格[/b]
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.不同的运算符
具体可参见附件中的图片,暂时还不知道怎么直接把图片放在文中!好悲剧
[b]
一定要注意 字符串比较用
if [ "$myvar" = "foo bar coo" ]
若是不加“”的话,如果传进来的 参数是 foo bar coo 那么就会变成
if [ foo bar coo = "foo bar coo" ]
就不会进入该分支进行执行了。[/b]
10.函数的使用
sh f2.sh
那么输出的结果就是
haha
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;
[b]if 和 [ 之间一定要有空格,[]之内的参数也需要有空格[/b]
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.不同的运算符
具体可参见附件中的图片,暂时还不知道怎么直接把图片放在文中!好悲剧
[b]
一定要注意 字符串比较用
if [ "$myvar" = "foo bar coo" ]
若是不加“”的话,如果传进来的 参数是 foo bar coo 那么就会变成
if [ foo bar coo = "foo bar coo" ]
就不会进入该分支进行执行了。[/b]
10.函数的使用
vi f2.sh;
#!/bin/bash
fun2 () {
_var1=$1; #这里的$1就是传入的第一个参数,shell脚本中参数都是在函数命令后面介入,不是在括号中传入的风格
echo $_var1;
}
fun2 haha
sh f2.sh
那么输出的结果就是
haha