linux 自学笔记(十二)Shell编程

17 Shell 编程

17.1 Shell语法

shell结构:

  1. #! 指定执行脚本的shell(如果不写,就用默认shell执行)
  2. # 注释行
  3. 命令和控制结构

创建shell程序的步骤:

  1. 创建一个包含命令和控件结构的文件
  2. 修改这个文件的权限使它可以执行     (使用 chomd  u+x)
  3. 执行  ./example  (也可以使用“sh example”)

Shell 变量

变量:是shell传递数据的一种方法,用来代表每个取值的符号名。

shell有2类变量:临时变量永久变量

临时变量是shell程序内部定义的,其适用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。

永久变量是环境变量,其值不随shell脚本的执行结束而消失。

用户自定义变量:由字母或下划线开头,由字母、数字或下划线组成,并且大小写意义不同。变量名长度没哟限制。

                                在使用变量值时,要在变量名前加上前缀”$“.

设置和使用变量

设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。

变量赋值:赋值号“=”两边应没有空格。

定义时赋值,如  NUM=1

将一个命令的执行结果赋给变量:如  TIME=`date`   (`  不是单引号,是命令替换符---键盘左上角的那个键)

将一个变量赋值给另一个变量,如   A=$B

使用echo命令查看变量值,例如  echo $A

列出所有变量:set

删除变量:       unset

包含多个字的变量:$NAME="Mike Ron"

                                    $NAME='Mike Ron'

单引号和双信号的区别:单引号的内容原封不动地指定给了变量,而双引号会显示变量值。

                                          # $ABC='$NAME Junior'

                                         # echo $ABC

                                          $NAME Junior    

Shell解释执行用户命令时,将命令的第一个部分作为命令名,其他部分作为参数。由于现在命令行上的位置确定的参数称为位置参数。

例如: ls -l file1 file1 file1

$0 这个程序的文件名 ls -l

$n 这个程序的第n个参数值,n=1~9         (位置变量

$* 这个程序的所有参数

$# 这个程序的参数的个数

$$ 这个程序的PID

$!  执行上一个后台命令的PID

$? 执行那个上一个命令的返回值(0 表示这个脚本执行成功,非0 表示这个脚本执行成失败)

Shell命令

read命令:从键盘读入数据,赋值变量

    例如:read UserName

expr:对整数型变量进行算术运算

   例如:expr 3 + 5     %3+5=8

                expr 3 \* 5   % 3*5=15

==========================================================

变量测试语句

变量测试语句:用于测试变量是否相等、是否为空、文件类型等。

格式:test 测试条件

测试范围:整数、字符串、文件

字符串测试:

test  str1=str2     %测试字符串是否相等

test  str1!=str2    %测试字符串是否不相等

test  str1            %测试字符串是否不为空

test  -n str1            %测试字符串是否不为空

test  -z str1            %测试字符串是否为空

整数测试:

test int1  -eq  int2     %整数是否相等

test int1  -ge  int2      %int1>=int2?

test int1  -gt  int2      %int1>int2?

test int1  -le  int2      %int1<=int2?

test int1  -lt  int2      %int1<int2?

test int1  -ne  int2      %整数是否不相等

文件测试:

test -d file   % 文件是否是目录

test -f file   % 文件是否是常规文件

变量测试语句一般不单独使用,一般作为if语句的测试条件

if  int1  -eq  int2 
  ...
fi

流程控制语句:

  1. if  条件   then
  2.          .....
  3. else
  4.       .....
  5. fi

----------------------------------------

  1. if     条件1    then
  2.        命令1
  3. elif  条件2   then 
  4.        命令2
  5. else   命令3
  6. fi

多个条件的联合:

-a       (and)

-o       (or )


exit:推出程序执行,并返回一个返回值,返回值为0为正常退出,非0 为非正常退出。

例如  exit 0


for...done  语句

格式: 

  1. for  变量   in  名字表
  2. do
  3.      命令列表
  4. done

-----------------------------------

awk 命令格式 (分段提取的)

awk -F 域分隔符‘命令’

示例:

  1. 检测系统中UID 为0 的用户: awk -F :'$3==0{print$1}' /etc/passwd                           (:为分隔符,‘’为单引号,{}为要显示的内容)         
  2. 检测系统中命令为空的用户:awk -F:'length($2)==0{print$1}' /etc/passwd

select 把关键字中的每一项做成类似表单,以交互的方式执行do 和done之间的命令

格式:

  1. select变量 in  关键字
  2. do  
  3.     command 1
  4.        ....
  5.     command n
  6. done

case ...esac 语句

格式:

  1. case 变量 in
  2.    字符串1)   命令列表1
  3.                         ;;
  4.             ...
  5.    字符串n)   命令列表n
  6.                         ;;
  7. esca

while 语句

格式:

  1. while 条件
  2. do  
  3.       命令
  4. done


until 

语句

格式:

  1. until 条件
  2. do 
  3.      命令
  4. done

until类似while,不同的是until是条件返回值为假时,才继续执行。


跳出循环:breakcontinue

break        跳出整个循环

continue 跳出本次循环,进行下次循环


shift 指令:参数左移,每执行一次,参数序列顺序左移一个位置。

                     用于分别处理每个参数,移出去时参数不再可用



函数应用

函数的定义:

  1. 函数名()
  2. {
  3.   命令序列
  4. }

函数的调用:不带()

函数名  参数1    参数2 ...

函数中的变量:  变量均为全局变量,没有局部变量

函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2...来引用。


17.2 Shell脚本调试

sh -x script 

              这将执行该脚本并显示所有变量的值。

sh -n script

            不执行脚本只是检查语法的模式,将返回所有语法错误



执行脚本的权限

  1. 该用户对脚本有 r x权限
  2. 对这个脚本所在目录有 rx 权限
  3. 若该用户对脚本只有 r 权限,可以使用如下命令执行:sh 脚本名


你可能感兴趣的:(linux 自学笔记(十二)Shell编程)