首页 > 代码库 > shell简单入门(一)

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            //小于等于

 

shell简单入门(一)