第十三章 学习Shell脚本
从学习export命令理解到的Shell环境和变量生存期
http://www.chinaunix.net/jh/4/322149.html
数值运算方法
Bash shell 只支持整型,不支持浮点。 将变量声明为整型有两种方法:
declare -i num=$a*$b
num=$(($a*$b)) 即: var=$((运算内容))
test 用于判断条件
判断符号[ ] 等价于 test [ "$HOME" != "$PATH" ] 等价于 test "$HOME != "$PATH"
判断符号中的所有组件都需要用空格分隔,且其中的变量一定要用双引号括起来。
0为真 1为假
Shell脚本的默认变量
$0代表文件名 $1代表第一个参数 $#代表参数个数 $? 代表上个程序执行后的返回值
条件判断
if 条件1 ; then
elif 条件2 ; then
else
fi
条件为shell命令
如 if [ "1" == "1" ]; then
fi
等价于
if test "1" == "1" ; then
fi
再如
if echo "AAAA" | grep "A" ; then
fi
下面的程序用于判断用户输入的日期是否是我的生日
read -p "Please input birthday: (ex 820217) " birthday
birthday=`echo $birthday | grep "[0-9]\{6,\}"`
if [ -z "$birthday" ]; then
echo -e "Please input correct birthday: \n"
elif [ "$birthday" == "820201" ]; then
echo -e "It is my birthday \n"
else
echo -e "The birthday you input is $birthday \n"
fi
birthday=`echo $birthday | grep "[0-9]\{6,\}"`
if [ -z "$birthday" ]; then
echo -e "Please input correct birthday: \n"
elif [ "$birthday" == "820201" ]; then
echo -e "It is my birthday \n"
else
echo -e "The birthday you input is $birthday \n"
fi
将信息重定向到标准错误: echo kk >&2 注:中间没有空格。
case 用法
case 值 in
模式1) 命令
;;
模式2) 命令
;;
*) 命令
;;
esac
模式中可以用 | 符号来判断多个条件, 还可以用匹配符号?,*,[]等。
*)代表当不满足其它模式时的条件。
#!/bin/bash
read -p "Please input name:" NAME
case $NAME in
m|M) echo "mayi" # |的用法
;;
m*t) echo "myt" # *匹配符
;;
*) echo "not found"
;;
esacuntil:先执行循环体内的内容,再测试条件,也就是说循环至少会执行一次
until 条件
命令
done
#!/bin/bash
ISROOT=`who | grep lgxqf`
until [ "$ISROOT" ]
do
echo finding
sleep 2
done
echo lgxqf logged in
while 条件
do
命令
done
#!/bin/bash
#Read data from file
if [ -z "$1" ] || [ ! -f "$1" ]; then
echo Please input valid file name.
exit 1
fi
while read CONTENT
do
echo $CONTENT
done < "$1"

浙公网安备 33010602011771号