#!/bin/bash

#!第一行不是注释,而是指定使用的语言是什么,即告诉系统用什么脚本语言执行,这里用bash执行。

变量定义: AAA=112222333 声明局部变量,在此层次的bash中访问

                export AAA=111222333    声明全局变量,只会在bash本身及他的子bash中访问到

获取变量:$AAA

例如

echo $AAA

参数

$1 代表第一个参数

$2 代表第二个参数

类推


$?

查看上一个命令执行是否成功0(zero)表示成功非零表示失败

$$

用于获取脚本进程的PID


读取用户输入的字符并赋值给变量AAA

read -p 'pleash input some words!' AAA

-p 表示提示



SHELL脚本的执行方式

    1. 输入完整的路径例如 /tmp/test.sh

       2. 输入相对路径 在 pwd=/tmp下

        ./test.sh

        

bash ./test.sh
bash /tmp/test.sh

使用1,2要求test.sh有x(可执行例如chmod a+x /tmp/test.sh)权限

使用 bash +完整/相对路径 不需要 shell脚本具有x权限。

以上两种执行方式都是在子shell中声明的变量在他们的父shell中无法获取,即使export也不行。可以用

pstree |grep -A2 -B2 '\<grep\>'

查看grep语句在哪个bash中执行。

使用

. ./test.sh

表示在当前的shell中执行脚本不会新开一个子shell,两个点之间有一个空格。

也可以使用完整的路径例如:

. /tmp/test.sh

同样点(dot)和斜线(slash)之间有一个空格。


条件控制判断

[ ] && ||

if

[ abc ]
echo $?

[ 变量 ] 变量大于零判断结果为真(0)

[ $USER = root ]

判断用户是否是root

[ -b /dev/hda ] && echo 'You have an ide device'
[ -b /dev/sda ] && echo 'You have a scsi device'

-b 判断块设备是否存在

-f 判断普通文件是否存在

-d 判断目录是否存在

具体可产考man bash


bash -vx ./test.bash

可用于调试bash -v表示执行过程可见 -x 替换变量值可见执行


if判断

if [ -b /dev/hda ]
    then echo "You have an ide device"
    elif [ -b /dev/sda ]
        then echo "You dont have a scsi device"
        else echo "You have nether scsi  nor ide device ."
fi
! [ -f /etc/passwd ]

!表示否定判断的结果。注意! 和 [ 中间有一个空格,若无空

export AAA=123
echo $?
[ -z $AAA ]

判断AAA 是否为空