#!/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.shbash /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语句在哪个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=123echo $?
[ -z $AAA ]
判断AAA 是否为空