您的位置:首页 > 运维架构 > Shell

Linux-3 shell编程总结及感悟

2018-01-16 23:04 309 查看
                       Linux-3 shell编程总结

一,shell特殊字符

1、一般通配符

 星号(*)功能:匹配任意字符的出现。

 问号(?) 功能:匹配任意一个字符。

 方括号([ ])功能:匹配括号内所限定的任何一个字符。 如: f[abcd]匹配fa、fb、fc、fd;

 双引号”功能:双引号括起来的字符作为普通字符对待。

 $ 、 倒引号` 、反斜线 \ 这三个仍保留其特殊功能。

 $表示变量替换,用预先指定的变量值代替$和变量。

 `倒引号表示命令替换。

 \反斜线在后面字符是$、`、”、\、换行符之一时,表示转义字符,即不对后面字符特殊处理。

  单引号’功能:单引号括起来的字符都作为普通字符。单引号保留空白符 用反斜杠消除单引号的特殊含义。

 注释(#)功能:shell将#看作注释符号,忽略#后的字符。

2、shell 变量
1.变量是表示计算机内存中保存的一种数据需要占的一个位置或一组位置的标识。变量名可以由数字,字符和下划线组成,但是变量名只能由字符和下划线开头,而不能是数字。
2. shell变量种类:
系统变量:主要在判断命令参数和命令执行后的返回值时用到。
环境变量:在程序运行时需要设置的变量。
用户变量:局部变量由用户定义,用户可以定义、修改或删除他们。

 3.变量赋值:格式 变量名=字符串

       myfile=/home/xxxy/test1.c

       注意:

      赋值号两边不能有空格 在赋给变量的值中含有空格、制表符或换行符,应该用双引号把这个字符串括起来。
4.访问shell变量的值,必须在变量名前面加$符号。例如:echo  $myfile。

5.删除用户变量:

person=null ; echo $person 输出:null ; 删除变量:unset person(清除变量);

3、输入\输出命令

read命令;利用read命令从键盘上读取数据,然后赋给指定的变量,可以交互式的为变量赋值。

格式 read 变量1 变量2 。。。

例:read  name           read a b c

说明:变量个数与给定数据个数相同,则依次对应赋值。变量个数少于数据个数,则从左至右对应赋值,最后一个变量被赋予剩余的所有数据。 变量个数多于数据个数,则从左至右对应赋值,最后多余的变量不被赋值;

3、shell的系统变量
1.shell的系统变量:
$0   当前程序的名称,实际上是一个内部参数,它必须有! 
$n   $1 表示第一个参数,$2 表示第二个参数,以此类推 .
$#   命令行参数的个数,即传递给程序的总的参数数目
$? 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。
$*   以“参数1 参数2 ... ” 形式保存所有参数,即传递给程序的所有参数组成的字符串。 
$@  以"参数1" "参数2" ... 形式保存所有参数 
$$   本程序的(进程ID号)PID 
$!   上一个命令的PID

2.shell位置变量:

     命令行参数是用户键入命令后所跟的数据项,通常用空格分隔。shell 脚本可以从命令行读取最多10个命令行参数存入位置变量或参数。使用shift 命令可以将参数后移;
    shell的位置变量:

变量

含义

$0

表示这个程序的文件名

$1 $2 ... $9

这个程序的第1个到第9个命令行参数值

$#

这个程序的参数个数(不包含命令名)

$*

这个程序的所有参数:“$1 $2 … $9”,把所有的参数保存在一个串中

$!

执行上一个背景指令的PID 

$?

执行上一个指令的返回值。

$$

这个程序的进程ID

4、算术运算
1.bash中执行整数算术运算的命令是let,其语法格式为:let arg … ;当表达式中有shell的特殊字符时,必须用双引号将其括起来。例如:

            a=1

            b=0

            let "c=a||b " 

            echo $c

2.算术运算:expr命令

功能:该命令提供算术运算功能,并能对数字或非数字字符串进行计算。expr命令将参数作为表达式,计算该表达式并将结果显示在标准输出设备上。

     例如:(注意运算符左右都有空格!)

              expr 10 + 10

              expr 20 / 5

               expr $a + $b
说明:

    字符*(乘)在shell中有特殊含义,因此他们的前面必须有转义字符“\”

        如:expr 2 \* 5

    当有变量参与运算时,需要在变量名前面加“$”

        如:a=11

        expr $a \% 2

5、if语句

1.if
– then-fi 结构

   语法格式:

           if  [ condition ]

               then 
       commands
        …

           fi

           if 语句以fi结束。

           条件外面的方括号[ ]必不可少,条件前后必须加空格。

2.if - then - else结构

   语法格式 

          if [ condition ]

             then
     true - commands

         else
      false - commands

           fi

3.if - then - elif结构

         if [ condition_1 ]

             then
      commands_1

         elif [ condition_2 ]

         then 
     commands_2

               …

         else
     commands_n

         fi

6、条件测试语句test

test命令
功能 : test是shell内部命令,它计算参数表达式的值为真还是为假。

               如果表达式为真,test返回0,否则,返回非0值。 

例子1:测试文件是否是一个普通文件。若是,则显示相应信息。

# test3

if test –f “$1”

then

      echo "$1 is an ordinary file."

else

     echo "$1 is not an ordinary file."

fi

1.有关字符串方面的测试

也可以用test命令比较字符串。test命令为字符串比较提供了一组操作符。 

操作符

示例

功能

-z 

-z str1

字符串str1长度为0,测试结果为真

-n 

-n str1

字符串str1长度大于0,测试结果为真

=

str1=str2

字符串相等

!=

str1!=str2

字符串不相等

<

str1<str2

str1小于str2

>

str1>str2

str1大于str2

2.有关数值方面的测试

test命令的数值判断操作符

操作符

示例

功能

-eq

num1  -eq  num2

num1等于num2,测试为真。 

-ne

num1  -ne  num2

num1不等于num2

-gt

num1  -gt  num2

num1大于num2

-ge

num1  -ge  num2

num1大于等于num2

-lt

num1  -lt  num2

num1小于num2

-le

num1  -le  num2

num1小于等于num2

7、case语句
                case 字符串 in

                模式字符串1) 命令;;

                模式字符串2) 命令;;

                模式字符串n) 命令;;

                esac
8、循环语句
1.while循环只要循环条件为真就进入循环体。

    格式:
       while [ condition ]
        do

           commands

        done

2.until循环与while循环类似,不同的是,until循环在循环条件为假时,执行循环体。
   
     until [ condition ]

          do
  commands

          done 
3.for循环用于按指定次数执行一系列命令。

        格式:
                for variable in list - of - values

                do
            commands

                done
4.break与continue语句
break可以结束整个循环,接着执行break之后的语句。

continue命令可以结束当次循环然后转入循环控制条件开始一次全新的循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux