bash shell编程学习笔记

#! /bin/bash

# shell编程基础

 

# Shell脚本的基本构成

       通常在第1行以“#!”开头指定Shell脚本的运行环境,即声明该脚本使用哪个Shell程序运行。如果没有指定,则以当前正在执行的Shell来解释执行。

       以“#”开头的行是注释行

       # 字符串左右的反引号(`)用于命令转换(转换)

 

# 包含外部脚本

       包含外部脚本文件的用法如下:

           . 脚本文件名,

           ./脚本文件名

        或

            source 脚本文件名

            bash 脚本文件名

        两种方式的作用一样,为简单起见,一般使用点号,但要注意点号和脚本文件名之间一定要有一个空格。

 

# 调试Shell脚本

       在bash中Shell脚本的调试主要是利用bash命令解释程序的选项来实现。其格式为:

       bash [选项] 脚本名

       -v 选项允许用户查看Shell程序的读入和执行,会打印出命令行的原始内容。

       -x 选项允许用户查看Shell程序的执行,会打印出经过替换后的命令行的内容。

 

# 用户自定义变量

       变量无需事先声明,给变量赋值也就是定义一个变量的过程:

       变量名=变量值

       等号两边不能留空格

              引用时需要$符号,如果紧跟在变量名称后面的字符是字母、数字或下划线,变量名称必须要用{}括起来

       删除变量

              使用 unset 命令可以删除变量。

       添加环境变量

              使用export命令将变量添加到环境中,作为临时的环境变量(一种全局变量)。

 

# 内部变量

         $0 当前脚本的文件名

         $n 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,以此类推

         $# 传递给脚本或函数的参数个数

         $* 传递给脚本或函数的所有参数

         $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同

         $? 上个命令的退出状态,或函数的返回值

         $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

 

# 数组

       bash支持一维数组,不支持多维数组。

       在Shell中用括号来表示数组,数组元素用空格符号分割开:

               数组名=(值1 ... 值n)

       也可以单独定义数组的各个元素。可以不使用连续的下标,而且下标的范围没有限制。

       读取数组元素值的语法格式为:

              ${数组名[下标]}

       采用以下用法获取数组元素的个数:

              ${#数组名[@]}

        以下方法用于取得数组单个元素的长度:

                ${#数组名[n]}

 

# 算术表达式

       bash自身并不支持简单的数学运算,但是可以通过awk 和expr等命令来实现数学运算。

       expr最为常用,使用它能够完成表达式的求值操作。

       例如:

               expr 5 + 3

                     注意操作数(用于计算的数)与运算符之间一定要有空格。

 

        更为简单的方式是使用$[]表达式进行数学计算,

        例如:

               val=$[5+3]

                      这种形式不要求运算符与操作数之间有空格

 

# 算术运算符

       +:加法

       -:减法

       *:乘法

       /:除法

     %:取余

      =:赋值

 

 

# 逻辑表达式

通常使用test命令来判断表达式的真假。

语法格式如下:

        test 逻辑表达式

该命令有一个更常用的别名,即左方括号“[”。语法格式如下:

        [ 逻辑表达式 ]

        中括号两边都要有空格

# 整数关系运算符

       -eq:相等。检测两个数是否相等,相等返回 true。

       -ne:不等于。检测两个数是否相等,不相等返回 true。

       -gt:大于。检测左边的数是否大于右边的,如果是,则返回 true。

       -lt:小于。检测左边的数是否小于右边的,如果是,则返回 true。

       -ge:大于等于。

       -le:小于等于。

# 字符串检测运算符

       =:检测两个字符串是否相等,相等返回 true。

       !=:检测两个字符串是否相等,不相等返回 true。

       -z:检测字符串长度是否为0,为0返回 true。

       -n:检测字符串长度是否为0,不为0返回 true。

       str:检测字符串是否为空,不为空返回 true。这里不用使用运算符,直接测试字符串,

               如 [ $a ] 返回 true。

# 文件测试运算符

       -b:检测文件是不是块设备文件,如果是,则返回 true。

       -c:检测文件是不是字符设备文件,如果是,则返回 true。

       -d:检测文件是不是目录,如果是,则返回 true。

       -f:检测文件是不是普通文件(既非目录,又非设备文件),如果是,则返回 true。

       -g:检测文件是否设置了SGID 位,如果是,则返回 true。

       -k:检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。

       -p:检测文件是不是具名管道,如果是,则返回 true。

       -u:检测文件是否设置了SUID 位,如果是,则返回 true。

       -r :检测文件是否可读,如果是,则返回 true。

       -w:检测文件是否可写,如果是,则返回 true。

       -x:检测文件是否可执行,如果是,则返回 true。

       -s :检测文件是否为空(文件大小是否大于0),不为空返回 true。

       -e:检测文件(包括目录)是否存在,如果是,则返回 true。

       -a:与运算。两个表达式都为 true才返回 true。

       -o:或运算。有一个表达式为true就返回 true。

         !:非运算。表达式值为 true 则返回 false,否则返回 true。

 

# 流程控制语句

# if语句

if [ 条件表达式 ]
then
    语句序列1
else
    语句序列2
fi	

 

# case语句

case 值 in
模式1)
    语句序列1
	;;
模式2)
    语句序列2
	;;
	……
模式n) 
    语句序列n
	;;
   *) 
    其他语句序列
esac


#例程
#!/bin/bash                                                                     
function printit()
{
    echo -n "your choice is $1"
}
function help()
{
    cat << HELP                                                             
    echo "this is help manual"                                              
HELP                                                                            
}
echo "this proogram will print your selection !"
case $1 in
    -h) help;;
    "one") printit;echo $1 |tr 'a-z' 'A-Z';;
    "two") printit;echo $1 |tr 'a-z' 'A-Z';;
    "three") printit;echo $1 |tr 'a-z' 'A-Z';;
    *) echo "usage $0 {one|two|three}";;
esac  

 

# 循环语句while

while 测试条件

do

       语句序列

done

 

#例程:

#! /bin/bash                                                                    
number=0
while [ $number -lt 10 ]
do
    echo $number
    number=`expr $number + 1`
done

 

# 循环语句until

until 测试条件

do

        语句序列

done

 

例程: 

#! /bin/bash                                                                    
var=10
until [ $var -lt 1 ]
do
    echo $var
    var=$(($var-1))
done	

 

# 循环语句for

for 变量 [in 列表]

do

     语句序列

done

 

例程:

#! /bin/bash                                                                    
var=0
for var in 1 2 3 4 5  ###
do
    echo "$var"
done	###

 

# 其他循环语句

       break 语句用来终止一个重复执行的循环。这种循环可以是for、until或者while语句构成的循环。

                break [n]

       continue 语句跳过循环体中位于它后面的语句,回到本层循环的开头,进行下一次循环。

                continue [n]

       exit 语句用来退出一个Shell程序,并设置退出值。

                exit [n]

 

# 函数的定义和调用

# 函数定义

       Shell 函数必须先定义后使用。

[function] 函数名()
{
    命令序列
    [return 返回值]
}

 

# 函数调用

       调用函数只需要给出函数名,不需要加括号,就像一般命令那样使用。

函数名 参数1 参数2 …… 参数n

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值