shell简单入门(一)
感觉看书慢,容易忘记,就上网找例子照着做,琢磨例子中不懂的,然后继续百度。
shell脚本在linux下的重要性就不用多说了吧。从第一个例子开始把:
#!/bin/bash echo "Hello World !"
执行的方式参考:http://www.jb51.net/article/53924.htm
修改文件的权限可以参考:http://www.cnblogs.com/hpcpp/articles/6961179.html。
这个脚本只是在屏幕输出Hello World !
继续添加内容:
#!/bin/sh a="hello world!" num=2 echo "a is : $a num is : ${num}nd"
这里的a和num是用户定义的变量,
用户变量
Shell编程中,使用用户变量无需事先声明,同时变量名的命名须遵循如下规则:
1). 首个字符必须为字母(a-z,A-Z);
2). 中间不能有空格,可以使用下划线(_) ;
3). 不能使用标点符号 ;
4). 不能使用bash里的关键字(可用help命令查看保留关键字) 。
注意这里的变量的左右不能有空格,可以试一下,是不是执行的时候报错,找不到这个变量。
访问变量值
要取用一个变量的值,只需在变量名前面加一个$ 。
这个语法是不是有点像php的语法?
大家看第二个例子:
#!/bin/bash #name display program if [ $# -eq 0 ] then echo "Name not provided." else echo "Your name is $1" fi
这个例子才像点样子了,#号开头的表示是注释。
$1表示什么呢?这个是位置参数,表示输入的第一个参数,如果这样执行文件bash 02.sh
则会输出:
Name not provided.
如果bash 02.sh xiaozi
则输出:
Your name is xiaozi
如果bash 03.sh xiaozi ni hao
输出还是不变,不能完整显示。这是因为有空格,空格分割的字符串看做是不同的字符串。字符串的位置也是从0开始的,把脚本倒数第2行改成$0,执行试试。
输出:
Your name is 02.sh
xiaozi的位置是1,ni的位置是2,hao的位置是3,以此类推。
如果想完整显示后面的字符串应该怎么做呢?
#!/bin/bash #name display program if [ $# -eq 0 ] then echo "Name not provided." else echo "Your name is $@" fi
把倒数第二行改成$@就行,
常用内部变量
$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的进程号 |
if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。
语句以fi结尾,就是把if反过来写,这点需要稍加注意。expression 和方括号([ ])之间必须有空格,[空格expression空格]是这样的,否则会有语法错误。
1) if ... else 语句
if [ expression ] then Statement(s) to be executed if expression is true fi
2) if ... else ... fi 语句
if [ expression ] then Statement(s) to be executed if expression is true else Statement(s) to be executed if expression is not true fi
3) if ... elif ... fi 语句
if [ expression 1 ] then Statement(s) to be executed if expression 1 is true elif [ expression 2 ] then Statement(s) to be executed if expression 2 is true elif [ expression 3 ] then Statement(s) to be executed if expression 3 is true else Statement(s) to be executed if no expression is true fi
也可以把then和if写到一行,在 if [ expression 1 ];then
记得在then前面添加一个英文的分号.
参考:http://c.biancheng.net/cpp/view/7005.html
整数操作符号-ge,-gt,-le,-lt, 别忘了加-
-eq //等于 -ne //不等于 -gt //大于 -lt //小于 ge //大于等于 le //小于等于