Linux下Bash shell学习笔记

时间:2023-01-20 01:04:03

原文地址: http://www.cnblogs.com/NickQ/p/8870423.html

1、shell下没有变量类型和定义的概念。

  1. 变量直接使用不用定义
  2. 所有值都视为字符串。
  3. 在对变量取值都需要加$
  4. 行注释为 #
  • 在shell中,算术运算,执行加减除

    例如:
    var1=5
    var2=2
    total=expr $var1+$var2

    $ 是取变量值运算符
    `` 是命令置换符,将expr \(var1+\)var2执行结果赋值给total
    expr 是做数学运算的命令
  • shell中,算术运算,执行乘

    例如:
    var1=5
    var2=2
    total=expr $var1 \* $var2

    * 在shell中为通配符。在此用作乘法需要转义
     是转义命令符,因此 *表示乘法。

2、设置PATH

PATH 是shell找寻命令的路径。如果执行的命令找不到,会报command not found错误。
修改PATH:

PATH = $PATH:/usr/temp

3、shell脚本第一句应指明解释器

一般第一句为: #!/bin/bash

4、条件判断

if 空格 [ 空格 条件1 空格 == 空格 条件二 ] 空格;空格then

注意汉字指明的空格 == ; > [] 两边必须有空格

例如:
#!/bin/bash

SYSTEM=`uname -s`

if [ $SYSTEM == "Linux" ] ; then
    echo "Linux System"
elif [ $SYSTEM == "FreeBSD" ] ; then
    echo "FreeBSD System"
elif [ $SYSTEM == "Solaris" ] ; then
    echo "Solaris System"
else
    echo "Unknow System"
fi  

判断符号

1、字符串判断
str1 = str2  当两个串有相同内容时为真 
str1 != str2  当串str1和str2不等时为真 
-n str1    当串的长度大于0时为真(串非空) 
-z str1    当串的长度为0时为真(空串) 
str1      当串str1为非空时为真

2、数字的判断
int1 -eq int2    两数相等为真 
int1 -ne int2    两数不等为真 
int1 -gt int2    int1大于int2为真 
int1 -ge int2    int1大于等于int2为真 
int1 -lt int2    int1小于int2为真 
int1 -le int2    int1小于等于int2为真

3、文件的判断
-r file     用户可读为真 
-w file      用户可写为真 
-x file     用户可执行为真 
-f file     文件为正规文件为真 
-d file     文件为目录为真 
-c file     文件为字符设备文件为真 
-b file     文件为块设备文件为真 
-s file     文件大小非0时为真 

4、复杂逻辑判断
-a         与 
-o        或 
!         非

5、switch/case结构

#!/bin/bash
SYSTEM=`uname -s`

case $SYSTEM in
    Linux)
        echo "Linux System"
        ;;

    FreeBSD)
        echo "FreeBSD System"
        ;;

    Solaris)
        echo "Solaris System"
        ;;

    *)  
        echo "Unknow System"
        ;;

esac   

6、Shell循环

举例 1:

#!/bin/bash

echo "Use for list 1~10"
for i in `seq 1 10` ; do 
    echo $i
done

echo "List file in current folder:"
for file in `ls`
do
    echo $file
done

举例 2:

#!/bin/bash

echo "Use while list 1~10"
min=1
max=10
while [ $min -le $max ]
do
    echo $min
    min=`expr $min + 1`
done

6、Shell参数解析

  • 参数说明:

    $#  表示参数的个数   
    $*  表示所有的参数
    $0  表示程序的名字  
    $1  表示第一个参数  
    $2  表示第二个参数
  • 参数解析
    实现不同参数,执行不同命令

    举例:
    #!/bin/bash
    while getopts "hv" opt     #Parser the arguments
    do
       case $opt in
         h)
             usage      ;;
         v)
             version    ;;
         ?)  
             usage      ;;
       esac
    done

    函数调用不需要加括号。

    Shell的其他应用

    Shell调试

打开调试 set -x
关闭调试 set +x

例如: set -x xxx.sh

在shell脚本中添加,可局部打开调试。

Bash Shell段注释

  :<< EOF

  注释掉的代码

  EOF

配置文件使用

source 或 . 命令可以让ini格式文件的引用生效。

例如:
#!/etc/bash.sh
CONF_FILE=/etc/sysconfig/network-scripts/ifcfg-eth0

source $CONF_FILE
etho  $IPADDR 

如上,变量IPADDR,未在shell中赋值,但却打印出了IP地址。原因是 source $CONF_FILE,是/etc/sysconfig/network-scripts/ifcfg-eth0文件中的IPADDR,被引用到此shell中。