shell编程

变量

变量类型:
1. 环境变量
2. 本地变量(局部变量)
3. 位置变量
4. 特殊变量

1、 环境变量

export VARNAME=VALUE
VARNAME=VALUE
export VARNAME  “导出”

2、 本地变量:

set VARNAME=VALUE: 作用域为整个bash进程;

3、局部变量

local VARNAME=VALUE:作用域为当前代码段;

4、 位置变量

$1, $2, ...
shift 轮替

5、 特殊变量

$:表示当前shell的进程ID即PID
$0:当前脚本的文件名
$n:传递给脚本或函数,n是一个数字,表示第几个参数
$#:传递给脚本或函数的参数个数
$*:传递给脚本或函数的所有参数
$@:传递给脚本或函数的所有参数,被引号包含时与$*不同
$?:上一个命令的退出状态或函数的返回值
$$:当前shell进程ID,对于shell脚本就是这些脚本所在的进程ID
 
撤消变量:
unset VARNAME

1、查看当前变量:

set

2、 查看当前shell中的环境变量:

printenv
env
export

条件判断

条件测试类型:

1、整数测试
2、字符测试
3、文件测试

条件测试的表达式:
[ expression ]
[[ expression ]]
test expression

1、整数比较

    -eq: 测试两个整数是否相等;比如 $A -eq $B
    -ne: 测试两个整数是否不等;不等,为真;相等,为假;
    -gt: 测试一个数是否大于另一个数;大于,为真;否则,为假;
    -lt: 测试一个数是否小于另一个数;小于,为真;否则,为假;
    -ge: 大于或等于
    -le:小于或等于

例如:

INT1=63
INT2=77
[ $INT1 -eq $INI2 ]
[[ $INT1 -eq $INT2 ]]
test $INT1 -eq $INT2 

2、 文件测试

-e FILE:测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限;
-w FILE: 测试
-x FILE: 测试

例如:

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

3、字符测试

==:测试是否相等,相等为真,不等为假
!=: 测试是否不等,不等为真,等为假
>
<
-n string: 测试指定字符串是否为空,空则真,不空则假
-z string: 测试指定字符串是否不空,不空为真,空则为假

4、组合测试条件

  -a :与关系
  -o :或关系
   !:非关系
例如
if [ $# -gt 1 -a $# -le 3 ] 测试大于1小于3的数
等价于 if [ $# -gt 1 ]&&if[ $# -le 3]  

循环

1、for 循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

例如:输出/etc下所有的文件

for i in $(ls /etc)
do 
	echo $i
done

2、while循环

while condition
do
    command
done

例如

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

3、until循环

until condition
do
    command
done

例子:

#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

5、case

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
跳出循环

1、break

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done

2、continue

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

函数

[ function ] funname [()]

{

    action;

    [return int;]

}
#1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
#2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

例子1

#!/bin/bash


funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !

例子2

#!/bin/bash


funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

shell中如何进行算术运算:
A=3
B=6
1、let 算术运算表达式
    let C=$A+$B
2、$[算术运算表达式]
    C=$[$A+$B]
3、$((算术运算表达式))
    C=$(($A+$B))
4、expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
    C=`expr $A + $B`
定义脚本退出状态码

exit: 退出脚本
当在脚本运行到某个命令满足退出条件时,使用exit n退出当前脚本。

exit #   //如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码
exit :退出码不变,即为最后一个命令的退出码
0表示成功(Zero - Success)

非0表示失败(Non-Zero  - Failure)

2表示用法不当(Incorrect Usage)

127表示命令没有找到(Command Not Found)

126表示不是可执行的(Not an executable)

>=128 信号产生
测试脚本是否有语法错误:
bash -n 测试脚本是否有语法错误

特殊权限SUID等详解

passwd:s

SUID: 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;
    chmod u+s FILE  给文件加s
    chmod u-s FILE  给文件减s
        如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;
SGID: 运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组;
    chmod g+s FILE
    chmod g-s FILE
        develop team, hadoop, hbase, hive 开发团队下三个用户
        /tmp/project/  
            develop
Sticky: 在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件;
    chmod o+t DIR
    chmod o-t DIR

SUID:SGID:Sticky
000-111

chmod 5755 /backup/test
umask 0022
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值