shell脚本 – 语法

注释

注释语法:#echo ${variable} 以 # 开头的行就是注释,会被解释器忽略
只能一行一行注释,不能像其他高级语言(Java、c++)注释一块,要想达到注释块的效果,可以用一个函数封装起来,然后将函数注释。曲线救国。

字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别下面给出:

单引号
str=this is a string
单引号字符串的限制:
– 单引号内的任何字符都会原样输出,单引号字符串中的变量是无效的
– 单引号字符串中不能出现单引号(对单引号使用转义符号后也不行)

双引号

variableName=miaowen
str="Hello, I know your name \"$variableName\"! \n
  • 双引号里可以有变量
  • 双引号里可以出现转义字符
流程控制

和Java语言不一样,sh的流程控制不可为空,如:

if (flag) {
    System.out.println(this is true);
} else {
    // do nothing
}

在sh/bash里面不能这么写,如果else分支没有语句执行,就不要写这个else语句。
还要注意一点,sh里的if[ $foo -eq 0], 这个方括号跟Java里if后面的圆括号大不相同,它是一个可执行程序(和ls grep 一样),在centOS上,它在/usr/bin目录下:

这个就很好的解释了为什么方括号后面要加一个空格,空格不能省略

if else
if condition
then
    command1
    command2
    ......
    commandn
fi

写成一行(适用于终端命令提示符:)

if `ps -ef | grep ssh`; then echo hello; fi
if else-if else
if condition1
then
    command1
elif condition1
    command2
else
    commandN
fi
case
case "${opt}" in
    "Install-Puppet-Server" )
        install_master $1
        exit
    ;;

    "Install-Puppet-Client" )
        install_client $1
        exit
    ;;

    "Config-Puppet-Server" )
        config_puppet_master
        exit
    ;;

    "Config-Puppet-Client" )
        config_puppet_client
        exit
    ;;

    "Exit" )
        exit
    ;;

    * ) echo "Bad option, please choose again"
esac

case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break

说点什么

avatar
  Subscribe  
提醒

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部