shell脚本基础入门

bash脚本编程

一、bash脚本编程

    bash脚本编程(可以理解为命令的堆砌)
    程序:包含语句和表达式(有判断和循环)
        顺序执行
        选择执行
        循环执行
    程序 = 指令 + 数据

    了解:编程分为2种:面向过程编程:以指令为中心组织数据;面向对象编程:以数据为中心组织指令

    故脚本编程可以归纳为面向过程的编程。

    程序的执行模型 :
    1、编译执行:源代码—>预处理—>编译—>汇编—>链接(编译器)
    2、解释执行:源码—>(解释器)通过解释器执行
    注:bash脚本的解释器bash

二、bash脚本的书写 
    shebang(定义脚本指定解释器),一般保存为.sh,linux没有严格的后缀要求
#!/bin/bash

#!/bin/bash
cat /etc/shells  
sleep 20   #执行的时候,创建一个新的子进程,睡眠等待,子进程占用父进程进行等待

注:运行脚本的时候,要书写绝对路径。或者直接书写bash test.sh临时给予权限

bash -x test.sh 调试运行

[root@localhost tmp]# bash -x test.sh 
+ cat /etc/shells #每个命令逐条显示,如有错误会进行提示
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
+ sleep 20         #这里是等待了20秒之后才继续执行下一条命令
+ dasd
test.sh: line 4: dasd: command not found
[root@localhost tmp]#

 三、变量相关知识

    变量的定义:命名的内存空间
    变量名和变量值组成,不同的视角变量有不同的分类

    1、数据类型(按内容分)
    强类型:例如c语言,对类型进行严格区分
    弱类型:bash脚本编程等,bash把所有值都默认当作字符

    数据类型的作用
    (1)定义了数据存储格式
    (2)数据的表示范围
    (3)可以参与的运算类型不一样

    2、类型(按格式分)
    数值型:http://blog.51cto.com/user_index.php?action=addblog_new&did=126489
        精确数值型:整数
        近似数值型:float(单精度)double(双精度)课外作业(浮点数的存储格式)
    字符型:不区分是否为单个字符

    布尔型:true,false-->0,1

        几个重要的逻辑运算符:             
        逻辑与运算:  &&    a  &&  b    全真才为真,有假为假
        逻辑或运算:  ||    a  ||  b    全假才为假,有真为真
        逻辑非运算:  !    !a         取反的运算
四、bash变量类型
        (1)本地变量:只对当前shell进程有效,对当前shell之外的shell无效(如父shell进程和子shell进程都无效)

[root@localhost tmp]# aa=3
[root@localhost tmp]# echo $aa
3
[root@localhost tmp]# bash
[root@localhost tmp]# echo $aa

[root@localhost tmp]# aa=2
[root@localhost tmp]# exit
exit
[root@localhost tmp]# echo $aa
3
[root@localhost tmp]#

        (2)环境变量:对当前shell进程及其子shell进程有效

[root@localhost tmp]# export HELLO="hello1"
[root@localhost tmp]# echo $HELLO
hello1
[root@localhost tmp]# bash
[root@localhost tmp]# echo $HELLO
hello1
[root@localhost ~]# env | grep ‘HELLO‘
HELLO=hello1
[root@localhost ~]# unset HELLO    #取消环境变量的设置(这里只对子进程生效)
[root@localhost ~]# env | grep ‘HELLO‘
[root@localhost ~]# echo $HELLO

[root@localhost ~]# exit
exit
[root@localhost ~]# echo $HELLO
hello1
[root@localhost ~]#

        注:env(printenv)    显示当前shell中的所用环境变量

[root@localhost tmp]# env #这里只列出部分环境变量,env=printenv
HOSTNAME=localhost.localdomain
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.199.180 54823 22
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
USER=root

        (3)局部变量:仅对某一段代码空间有效的变量,通常用于脚本函数
        (4)位置变量:$1  $2,...
        (5)特殊变量:$?  $0  $#  $$  $*  $@  
五、变量的引用及命名
    1、${变量名}==变量的引用        
        ·强引用:  ‘‘   echo ‘root shell  is   $SHELL‘ 原样输出,不能解释$符号 

        ·弱引用: “”  echo “root shell  is   $SHELL” 输出“root shell is /bin/bash”

    2、变量的命名规则
        1、不能用程序中的关键字:if  elif  fi  then  for  ....
        2、只能使用数字、字母或下划线,且不能以数字开头
        3、尽量做到见名知意
六、bash的配置文件

    1、profile类:为交互式登陆的shell进程提供配置。

        ·对所有用户有效的配置文件即全局有效: /etc/profile和/etc/profile.d/*.sh

        ·仅对当前用户有效的配置文件即用户个人有效:~/bash_profile

        注:profile类配置文件的功用:

        (1)用以定义环境变量

        (2)运行命令或脚本

    2、bashrc类:为非交互式登陆的shell进程提供配置。

        ·全局有效:/etc/bashrc

        ·个人用户有效:~/.bashrc

        注:bashrc类配置文件的功用:

        (1)定义本地变量

        (2)定义命令别名(alias)

        如何使修改后的bash配置文件重新生效:(2种方法)

        source配置文件 或者 .配置文件

        配置文件生效的优先级:

    ·交互式登陆:/etc/profile->/etc/profile.d/*.sh->~/bash_profile->~/.bashrc->/etc/bashrc

所以定义此文件可以使其他文件全都生效。

    ·非交互式登陆:~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh


本文出自 “行成于思” 博客,请务必保留此出处http://meaningful.blog.51cto.com/4543452/1631658

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。