shell脚本编程

shell 编程
    编程能力:脚本编程

本地变量;
varname=value 作用域为整个bash进程

局部变量
local varname=value 作为域当前代码段

环境变量 作用域为当前shell进程及其子进程
export varname=value
    导出
脚本在执行时会启动一个shell进程
    命令行中启动的脚本继承当前shell环境变量
    系统自动执行的脚本(非命令行启动)就需要自我定义需要
export NAME

位置变量
$1,$2.....
特殊变量

$? 上一个命令的执行状态返回值

程序执行,可能有两类返回值
    程序执行结果
    程序状态返回代码(0-255)   
    0 正确执行
    1-255 错误执行, 1,2, 127 系统预留
输出重定向
>
>>
2>
2>>
&>

撤消变量

unset VARNAME

查看当前shell中变量

set

查看当前shell中环境变量

env
printenv
export

shell不能做算数运算
脚本:命令的堆砌,按实际需要,结合命令流程控制机制的实现的源程序

shebang : 魔数
#!/bin/bash
#!/usr/bin/python
#注释行

条件测试的表达式
    [ expression ]
    [ [expression ] ]
    test expression
整数比较
    -eq :测试两个整数是否相等 比如$A -eq $B 正确返回1
    -ne :测试两个整烽是否不等 不等,为真,相等 为假
    -gt :大于为真,否则为假
    -lt :小于,为真  否则,为假
    -ge :大于或等于
    -le :小于或等于

命令的间逻辑关系
    逻辑与 &&
    逻辑或 || 一个为真时,第二个条件必须判断
id user &> /dev/null && echo "hello ,student"

练习
给定一个用户
    1、如果其UID为0 ,就显示为管理员否则就显示是普通用户

变量名称
    1、只能包含字母,数字

============================================================================================
条件判断,控制结构
    if 判断条件; then
        statement 1
        statement 2
    fi

    if 判断条件;then
        statement1
    else
        statement2
    fi

[root@localhost shsh]# more two.sh
#!/bin/bash
NAME=wyj
if id $NAME &> /dev/null; then
        echo "$NAME exists"
else
        echo "这不是管理员"
        useradd $NAME
        echo $NAME | passwd --stdin $NAME &> /dev/null
        echo "add $NAME"
fi

[root@localhost shsh]# more three.sh
#!/bin/bash
USERNAME=root
USERNAMEID=`id -u $USERNAME`
USERNAMEGID=`id -g $USERNAME`
if [ $USERNAMEID -eq $USERNAMEGID ];then
        echo "good guy"
else
        echo "bad guy"
fi

shell中如何做算数运算
A=3
B=6
1、let  算术运算表达式
    let C=$A+$B
[root@localhost shsh]# a=3
[root@localhost shsh]# b=5
[root@localhost shsh]# let c=$a+$b
[root@localhost shsh]# echo $c
8

2、$[算术运算表达式]
    C=$[$A+$B]
[root@localhost shsh]# c=$[$a+$b]
[root@localhost shsh]# echo $c
8

3、$((算术运算表达式))
    C=$(($A+$B))
[root@localhost shsh]# d=1
[root@localhost shsh]# f=6
[root@localhost shsh]# i=$(($d+$f))
[root@localhost shsh]# echo $i
7
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
c=`expr $a +$b`

[root@localhost shsh]# j=`expr $a + $b`
[root@localhost shsh]# echo $j
8
[root@localhost shsh]#

===================================================================================================
脚本编程之四 整数测试及特殊变量

if ! grep "^$USERNAME\>" /etc/passwd &> /dev/null; then
    echo "错误"
fi

bash中常用的条件测试有三种

整数测试
双目测试
-gt
-eq
-ge
-lt

文件测试

[ expression ]

[ [ expression ] ]

test expression

[ $a -eq $b ]

[ [ ] ]

文件测试

-e FILE 测试文件是否存在

-f FILE 测试文件是否为普通文件

-d FILE 测试指定路径是否为目录

-r FILE 测试当前用户对指定文件是否有读取权限

-w FILE 测试当前文件是否有写权限

-x

[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]

[root@localhost shsh]# more five.sh
#!/bin/bash
FILE=/etc/inittab
if [ ! -e $FILE ];then
        echo "NO $FILE"
    exit 8
fi

[root@localhost shsh]# ./five.sh
d /etc/initta1b
[root@localhost shsh]# more five.sh
#!/bin/bash
#对文件取返,输出不存在文件名
FILE=/etc/initta1b
if [ ! -e $FILE ];then
        echo "d $FILE"
        exit 8
fi
[root@localhost shsh]#

你可能感兴趣的:(能力,local,Export)