概览

  • 变量
  • 替换(转义符、命令替换、变量的替换)
  • 运算符
  • 字符串
  • 数组
  • print函数
  • 条件语句
  • 循环语句
  • shell函数

常见的编程语言分为两类

  1. 一个是编译型语言,如:c/c++/java等,它们远行前全部一起要经过编译器的编译。
  2. 另一个解释型语言,执行时,需要使用解释器一行一行地转换为代码,如:awk, perl, python与shell等。
    Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。

第一个shell脚本程序

  • /opt/hadoop-2.7.7/sbin此脚本为该hadoop下的start-balancer.sh脚本
  • “#!”是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行,下面用的是bash解释器

  • 执行情况(运行前为脚本增加可执行权限chmod u+x grade.sh

[root@wq1 ~]# ./grade.sh         
Please input your grade:88
Good,Your grade is B.
[root@wq1 ~]# 
[root@wq1 ~]# ./grade.sh
Please input your grade:****999
./grade.sh:行14: [[: ****999: 语法错误: 期待操作数 (错误符号是 "****999")
./grade.sh:行16: [[: ****999: 语法错误: 期待操作数 (错误符号是 "****999")
./grade.sh:行18: [[: ****999: 语法错误: 期待操作数 (错误符号是 "****999")
./grade.sh:行20: [[: ****999: 语法错误: 期待操作数 (错误符号是 "****999")
./grade.sh:行22: [[: ****999: 语法错误: 期待操作数 (错误符号是 "****999")
Unknow argument....
  • 输入一个0-100的数字,根据数字大小做出评级
#/bin/bash
read -p "Please input your grade:" x
declare -i x
#jugemet x value is none or not
if [ "x" == "" ];then
    echo "You don't input your grade...."
    exit 5
fi
#jugement the gread level
if [[ "x" -ge "90" && "x" -le "100" ]];then
    echo "Congratulation,Your grade is A."
elif [[ "x" -ge "80" && "x" -le "89" ]];then
    echo "Good,Your grade is B."
elif [[ "x" -ge "70" && "x" -le "79" ]];then
    echo "Ok.Your grade is C."
elif [[ "x" -ge "60" && "x" -le "69" ]];then
    echo "Yeah,Your grade is D."
elif [[ "$x" -lt "60" ]];then
    echo "Right,Your grade is F."
else
    echo "Unknow argument...."
fi

变量

  • 定义变量
  1. 变量名和等号之间不能有空格;
  2. 首个字符必须为字母(a-z,A-Z)。
  3. 中间不能有空格,可以使用下划线(_)。
  4. 不能使用标点符号。
  5. 不能使用bash里的关键字(可用help命令查看保留关键字)。
country="China"
Number=100
  • 使用变量
    只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
country="China"
echo country
echo{country}
echo "I love my ${country}abcd!"  
  • 重定义变量: 直接把变量重新像开始定义的那样子赋值就可以了
country="China"
country="ribenguizi"
  • 只读变量: 用 readonly 命令 可以把变量字义为只读变量。
readonly country="China"
#或
country="China"
readonly country
  • 删除变量: 使用unset命令可以删除变量,但是不能删除只读的变量
unset variable_name
  • $* 和 $@ 的区别
     $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(” “)包含时,都以”$1” “$2” … “$n” 的形式输出所有参数。但是当它们被双引号(” “)包含时,”$*” 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;”$@” 会将各个参数分开,以”$1″ “$2” … “$n” 的形式输出所有参数。
    $? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1

Shell中的替换

  • 转义符

Shell运算符

  • 算数运算符:
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

Shell中的字符串

Shell的数组

printf函数

Shell中条件语句

shell的文件包含