shell脚本

shell简介
shell脚本程序就是按照一定的语法结构把若干linux命令组织在一起,使这些命令按照我们的要求完成一定功能。它可以进行类似程序的编写,并且不需要编译就能执行.
当编辑好脚本程序后,要使脚本程序可执行,需要改变其权限:
    #chmod +x filename

我们用的shell版本是bash,首先新建一个后缀名为 .sh的文件,这就是shell脚本, 如:vi test.sh  编好脚本后,保存退出,加可执行权限后就可以运行这个脚本,和执行程序一样。

Shell中变量与变量的设定:  变量没有类型
1.变量与变量内容以等号(=)来连结;    
2.等号两边不能直接接空格符;    
3.变量名称只能是英文字母与数字,但是数字不能是开头字符;
4.引用变量用“$变量名”,例如  echo $name
5.取消变量的方法  unset 变量名, 例如:unset name
6.一般大写字符为系统预设变量,自己设定的变量可用小写。

单引号,双引号,反引号,反斜线用法:
若有空格符可以使用双引号或单引号将变量内容结合起来,但须要特别留意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。
    # name=“$LOGNAME is me”  //root is me
    # name=‘$LOGNAME is me’  //$LOGNAME is me
反引号用于设置系统命令的输出到变量,shell将反引号中的内容作为一个系统指令并执行其内容。
如:echo `hello` 系统会把hello当命令执行,但hello不是命令,不能执行。
反斜线用来屏蔽特殊字符的特殊含义,如:$ * ! $ | ?
用echo \*  就会输出 * 这个字符

特殊的变量:
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前ID号
$? 显示最后命令的退出状态,  0表示没有错误   非0表示有错误
$0 执行脚本的文件名
$1 $2 $3 ………   脚本的第n个参数名

env 显示目前系统中主要预设变量内容
set 显示目前系统中全部变量内量, 这里包括用户设定的变量

expr 是一个手工命令行计数器,可计算加减乘除,并输出结果
如: expr 10 + 10   输出结果为20    注意乘法要用:\*

declare  声明变量的内容
用法: declare 参数 变量名
参数: -i 定义为整数             -f 定义为函数
        -a 定义为数组             -r 定义为只读
       -x 定义为透过环境输出变量
例如: declare –i a 定义a 为整数,在进行整数运算时,可用a来存储结果

read 从键盘读入变量内容,相当于C语言的scanf 用法: read 变量名


条件测试:
test命令就是用于测试字符串、文件状态和数字的.test命令有两种格式:
test condition
或[ condition ]
使用方括号时,要注意在条件两边加上空格.
测试文件状态的条件表达式
    -e 是否存在    -d 是目录       -f 是文件      -L 符号连接            
-s 文件非空    -r 可读         -w 可写        -x 可执行
例如:#test -e test.sh && echo “exist”
      先判断如果该文件存件存在,则输出字符串 exist
[ … ] && ……        先判断如果是真,则执行后面的命令
[ … ] ;(分号)……  先判断再执行,不管条件真假

字符串测试:
  test “str1” 参数 “str2”
  [ “str1” 参数 “str2” ]
参数:     = 两个字符串相等   != 两个字符串不相等
        -z 空串            -n 非空串

数值测试:
   test num1 参数 num2
    [ num1 参数 num2 ]
参数:    -eq 数值相等       -ne 数值不相等
        -gt 数1大于数2       -lt 数1小于数2
        -ge 数1大于等于数2
        -le 数1小于等于数2

多重条件判定:
-a (and)与  当前后两条件都为真则返回true
-o (or)或   当前后两条件有一个为真则返回true
!           返回相反状态



控制结构:
if [条件1]; then
    执行第一段程序
elif [条件2]; then
    执行第二段程序
else
    执行第三段程序
fi

case $变量名 in
    “第一个变量内容”)
      程序段1
      ;;
    “第二个变量内容”)
      程序段2
      ;;
     *)
        其他程序段
        exit 1
esac

    在ARM linux平台上,找到 /usr/etc/rc.local 用vi 打开它,里面有一段if语句,查看/mnt/yaffs/下有无 myconfig.sh的文件,如果有就执行。这是用户自己配置的开机脚本,可以在/mnt/yaffs/下新建一个myconfig.sh的文件,在里面写上自己想在开机运行的脚本。比如修改IP,挂接NFS,运行一个小程序等。

linux开机启动五个脚本文件介绍:
/etc/profile:
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.  
   
/etc/bashrc:
为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
   
~/.bash_profile:
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.    
   
~/.bashrc:
该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该   
该文件被读取.    
   
~/.bash_logout:
当每次退出系统(退出bash shell)时,执行该文件.   

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,
而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。

变量与变量的设定

条件测试

控制结构  

原文地址:https://www.cnblogs.com/qinkai/p/2429715.html