您的位置:首页 > 运维架构 > Shell

bash 学习一 变量、参数、判断与循环

2015-12-18 17:52 639 查看
#!/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 是否为空

本文出自 “computerscience” 博客,请务必保留此出处http://changgusan.blog.51cto.com/1948748/1726173
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: