shell编程01-基本语法

来源:互联网 发布:酸碱滴定实验报告数据 编辑:程序博客网 时间:2024/04/28 00:19

1.  Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell

Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linuxshell命令编程>

2. 基本格式(通常以.sh为后缀名)

   vi  hello.sh

   #! /bin/bash      表示用哪一种shell解析器来解析执行这个脚本程序

   echo “hello world”

   给脚本添加x权限,才能执行:chmod +x hello.sh

   执行:sh hello.sh   或者   ./hello.sh

3.  linux shell中的变量分为“系统变量”和“用户自定义变量”

通过set命令查看系统变量

1/自定义变量

  变量=(等号两侧不能有空格,变量名大小写都可以,值上的双引号和单引号还是有区别的)

例:【root@min1~# love1=dog

   root@min1~# echo $love1

    dog

   root@min1~# love2=cat

   root@min1~# echo $love2

    cat

   root@min1~# love1=dog$love2

   root@min1~# echo $love1

    dogcat

   root@min1~# love1=dog$love2

   root@min1~# echo $love1

    dog$love2

   root@min1~# STR=”hello world”

   root@min1~# echo“$STRs is great”

    is great

  解决:【root@min1~# echo${STR}s is great

         hello world is great

2/撤销变量Aunset A

  readonly B=2   声明静态的变量B=2,不能unset

  3/export A :可把变量提升为当前shell进程中的全局环境变量,可供其他子shell程序使用

    例: vi a.sh                            vi b.sh

         #! /bin/bash                       #! /bin/bash

         a=aaa                             echo “in b.sh”$a

         echo “in a.sh......”$a

         sh b.sh

        root@min1~# sh a.sh

         in a.sh........aaa

         in b.sh........

     解决:有3种方法

          (1) export a=aaa

           (2) source ./b.sh

           (3) .  ./b.sh

        root@min1~# sh a.sh

         in a.sh........aaa

         in b.sh........aaa


总结:

1a.sh中直接调用b.sh,会让b.sha所在的bash进程的“子进程”空间中执行

2、而子进程空间只能访问父进程中用export定义的变量

3、一个shell进程无法将自己定义的变量提升到父进程空间中去

4、“.”号执行脚本时,会让脚本在调用者所在的shell进程空间中执行

4. 反引号赋值

   A=`ls -la`   : 反引号,运行里面的命令,并把结果返回给变量A

   A=$(ls -la)  : 等价于反引号

5. 特殊变量

    $? 表示上一个命令退出的状态码

$$ 表示当前进程编号

$0 表示当前脚本名称

$n 表示n位置的输入参数(n代表数字,n>=1

$# 表示参数的个数,常用于循环

$*$@都表示参数列表 

  注:$*$@区别

    当它们被双引号" "包含时——

"$*" 会将所有的参数作为一个整体,以"$1 $2$n"的形式组成一个整串;

"$@" 会将各个参数分开,以"$1" "$2""$n"的形式组成一个参数列表

6. 算数运算

   1/expr   (expr运算符间要有空格)

   例:计算(2 + 3*4

       Echo `expr \`expr 2 + 3\`\*4`

   2/(())

 ((1+2))

 (((2+3)*4))

   3/$[]

 a=$[1+2]

 echo $a