shell编程

 
 
 shell编程
 
SRV=srv.com.cn
echo $SRV
 
全局变量
export SRV
 
 
变量的运算
 
expr 1 + 2 - 3 \* 4 / 5 
运算1加2减3乘4除5
 
 
 
环境变量
 
全局配置文件  /etc/profile
用户配置文件 ~/.bash_profile
 
 
echo $PATH
PATH="/opt/bin:$PATH"
 
 
 
预定义变量
 
$# 命令行中参数的个数
$* 所有未知参数的内容
$? 上一条参数执行会返回的状态,0为正常.
$$ 当前所在进程的进程号
$! 后台运行的最后一个进程号
$0 当前执行的进程/程序名
 
 
 
--------------------------------------------------
条件测试操作-------------------------------------------
-----------------------------------------------------
 
 
------------
test 命令
------------
 
 
条件成立时,返回结果为0
 
-d 是否为目录  Directory
-e 测试文件是否存在 Exist
-f 测试是否为文件 File
-r 测试当前用户是否有权限读写 Read
-w write权限
-x excute权限
-L 是否为link文件
 
例如:
-------------------------------------------
[root@test ~]# [ -e /etc/sysconfig ]
[root@test ~]# echo $?
0
[root@test ~]# [ -e /etc/sysconfi ]  
[root@test ~]# echo $?             
1
-------------------------------------------
 
 
例如:
 
-----------------------------------------------------------
&& 表示如果条件成立,则。。。。
-----------------------------------------------------------
[root@test ~]# [ -e /etc/sysconfig ] && echo "yes"
yes
[root@test ~]# [ -e /etc/sysconfi ] && echo "yes"  
[root@test ~]# 
------------------------------------------------------------
解释:如果/etc/sysconfig存在,则输出yes
------------------------------------------------------------
 
 
 
------------------------------------
整数比较  [ 整数1 操作符 整数2 ]
------------------------------------
 
常用操作符
 
-eq 等于(equal)
-ne 不等于(no equal)
-gt 大于(Greater Than)
-lt 小于 (less than)
-le 小于或者等于(lesser or equal)
-ge 大于或者等于(greater or equal)
 
 
 
例如:
 
-----------------------------------------------------------------
` ` 反引号表示结果输出,  wc 表示计算当前用户的数量
------------------------------------------------------------------
[root@test ~]# who | wc -l
2
[root@test ~]# who
root     tty1         2011-08-24 01:01
root     pts/0        2011-08-24 04:42 (211.1.1.100)
[root@test ~]# [ `who | wc -l` -le 10 ] && echo "yes"
yes
------------------------------------------------------------------
解释:查询当前系统登录的用户,如果数量小于或者等于10,输出yes
-------------------------------------------------------------------
 
 
 
------------------------------------------------------
[root@test ~]# BootUsage=`df -hT |grep /boot |awk '{print $6}' |cut -d "%" -f 1`
[root@test ~]# [ $BootUsage -gt 10 ] && echo "yes"                              
yes
[root@test ~]# df -hT |grep /boot
/dev/sda1     ext3     99M   12M   82M  13% /boot
-------------------------------------------------------
解释,如果/boot使用量大于或者等于10,则输出yes
-------------------------------------------------------
 
 
 
 
 
 
字符串比较
 
格式:
[ 字符串1 = 字符串2 ]    等于
[ 字符串1 != 字符串2 ]   不等于
[ -z 字符串 ]                   字符串为空
 
 
 
例如:
---------------------------------------------------------------------
[root@test ~]# read -p "Location:" FilePath
Location:/etc/init.d
[root@test ~]# [ $FilePath = /etc/init.d ] && echo "yes"
yes
----------------------------------------------------------------------
解释:读取键盘输出字符并赋值FilePath,如果其等于/etc/init.d则输出yes
-----------------------------------------------------------------------
 
 
----------------------------------------------
逻辑测试:
格式:  [ 表达式1 ]  操作符 [ 表达式2 ]
 
-a或&&  “而且”的意思。真真为真,其一为假则为假。
-o或||      “或者”的意思。全假才是假。
!             逻辑否,条件不成立,返回结果为真。
----------------------------------------------
 
 
 
 
 
******************************************************************
分支判断**********if语句
*******************************************************************
 
 
@@@@@@@@@@@@@@@@@@@@@
if条件语句---单分支结构
@@@@@@@@@@@@@@@@@@@@@
 
-------------------
if  磁盘空间>80%
      then  报警
fi
-------------------
 
脚本例子:
 
----------------------------------------
#!/bin/bash
#注释:如果磁盘空间超过80%,报警。
 
RATE=`df -hT |grep /boot |awk '{print $6}' |cut -d "%" -f 1`
 
if [ $RATE -gt 80 ]
then 
  echo "Warning,disk is full of 80%"
fi
-----------------------------------------
 
 
 
 
@@@@@@@@@@@@@@@@@@@@@@@
if条件语句----双分支结构
@@@@@@@@@@@@@@@@@@@@@@@
 
 
--------------------------------------
if   3306端口是否在监听状态
   then  mysql 服务处于运行状态
   else  启用mysql服务
fi
---------------------------------------
 
 
 
例子:
 
 
------------------------------------------------------------------
#!/bin/bash
#判断network服务是否在运行,是则输出提示,否则启动network服务
 
/etc/init.d/network status &> /dev/null
#查询networkl状态,并取值导出
 
if [ $? -eq 0 ]
   then
       echo "network is running!"
   else
       /etc/ini.d/network restart
fi
--------------------------------------------------------------------
 
 
 
 
@@@@@@@@@@@@@@@@@@@@
if 条件语句的多分支结构
@@@@@@@@@@@@@@@@@@@@
 
 
----------------------------
if  条件测试1 ; then
    命令序列1
elif 条件测试2; then
    命令序列2
elif  ....
 
.......
 
else
    命令序列n
if
----------------------------
 
 
 
 
**********************************************************************
循环操作***********for循环语句
**********************************************************************
 
 
@@@@@@@@@@@@@@@@
for循环
@@@@@@@@@@@@@@@@
 
 
------------------------------
for 收件人 in  邮件地址列表
do
    发送邮件
done
------------------------------
 
 
例子:
 
------------------------------------------------------------
#!/bin/bash
#输出三条文字信息:每一天中的morning noon evening
 
for TM in "Morning" "Noon" "Evening"
do
  echo "This is the $TM of the day"
done
-------------------------------------------------------------
 
 
@@@@@@@@@@@@@
while循环
@@@@@@@@@@@@@
 
 
--------------------------
while 可用内存<100MB
do
      获取可用内存数
done
--------------------------
 
例子:
 
-------------------------------------------------------------------
#!/bin/bash
#批量增加20个系统用户user1.user2.--user4
 
i=1
while [ $i -le 4 ]
do
       useradd user$i
       echo "qwerasdf" | passwd -stdin user$i &> /dev/null
       #-stdin意思为标准输入 standard in
        i=`expr $i + 1`
done
-------------------------------------------------------------------
   
 
@@@@@@@@@@@@@@@@
case多重分支语句
@@@@@@@@@@@@@@@@
 
-----------------------
case  变量值 in
 
  模式1)
      命令序列1
      ;;
  模式2)
      命令序列2
      ;;
 
...........
*)
默认执行的命令序列
 
esac
----------------------
 
例子:
 
----------------------------------------------------------------
#!/bin/bash
 
read -p "start or stop?:" READ
#读入变量READ#
 
case $READ in
 
     start)
          echo "STARTing............"
          ;;
     stop)
          echo "STOPing.............."
          ;;
      *)
          echo "just START or STOP !!!"
          ;;
esac
----------------------------------------------------------------
 
 
@@@@@@@@@@@@@@@@
until循环语句
@@@@@@@@@@@@@@@@
直到。。。为止,就不再执行
 
---------------------
until  条件测试命令
do    
    命令序列
 
done
---------------------
 
 
 
@@@@@@@@@@@@@@@@@@
shift迁移语句
@@@@@@@@@@@@@@@@@@
变量取值向左移动
 
 
 
 
@@@@@@@@@@@@@@@@@@@
循环控制语句break,continue
@@@@@@@@@@@@@@@@@@@
 
 
----------------------------
while  命令
    do
        .........
        .........
        break(continue)
        .........
        .........
    done
    .........
----------------------------
break为中断循环,继续下面命令
continue为跳过此次循环
 
 
 
@@@@@@@@@@@@@@@@@@@@
shell函数应用
@@@@@@@@@@@@@@@@@@@@
 
 
-----------------
函数名() {
      命令序列
}
-----------------
 
 
例子:
 
-----------------------------
#!/bin/bash
 
adder() {
     echo `expr $1 + $2`
}
 
adder 12 34
adder 11 22
-----------------------------
 
 
shell编程完。。。。。。。。。。。。。。。
 
 
 
 

你可能感兴趣的:(编程,shell,职场,休闲)