起步
注意事项 :
- 命令,参数间的多个空白都会被忽略掉
- 空白行也会被忽略掉,[tab]所得空白等于[space]所得空白
- 如果得到一个Enter符号(CR),就尝试执行该命令
- "#"号后面为注释
执行方法 :
- 直接命令执行(.sh文件必须具有rx权限)
- 以bash进程来执行(有r权限即可执行),该种执行方式在子进程中执行,所以声明的变量在父进程中访问不到,换句话说,重新建立一个子Shell,在子Shell中执行脚本的语句,但子Shell新建的,修改的,删除的变量不会带到父Shell中
eg: bash shell.sh
或
eg: sh shell.sh
eg: ./shell.sh
- 用source执行,该种执行方式是使用父进程执行,故声明的变量可以访问,换句话说,这个命令只是简单的读取当前脚本的语句并执行,该脚本所新建,修改的变量都会反映到当前的Shell中
eg: source shell.sh
或
eg: . shell.sh
配置变量
环境变量的配置请移步/etc/profile
新建fanyank.sh
export fanyank_pwd=123123
执行(在当前shell中生效)
source fanyank.sh
测试
echo $fanyank_pwd
判断符号:
判断result变量是否等于Y
[ "$result" == "Y" ]
shell script默认变量:
eg: shell.sh opt1 opt2
$0 $1 $2
- $#: 后接参数的个数
- **1","$2"...
eg: echo "All parameters are '$@'"
shift变量偏移:
从前往后偏移number个变量
shift [number]
if...then...
if [条件判断式] ; then
...
else
...
fi
多重条件判断
if [条件判断式] ; then
...
elif [条件判断式] ; then
...
else
...
fi
举个例子:
if [ "$result" == "Y" ] || [ "$result" == "y" ] ; then
echo "ok"
fi
case...esac
case $变量名称 in
"变量内容1")
...
;;
"变量内容2")
...
;;
*)
...
;;
esac
function
function 拥有内置变量1,$2...,与shell script一样
function name () {
}
举个例子:
function printit() {
echo "Your choice is $1"
}
#调用
printit 1
循环loop:
- while循环
while [condition]
do
...
done
举个例子
while [ "$yn" != "yes" -a "$yn" != "YES" ]
do
echo "Input yes/YES"
done
- for循环(第一种形式)
for var in con1 con2 con3
do
...
done
举个例子
users=$(last | cut -d ' ' -f1)
for username in $users
do
echo "$username"
done
for i in $(seq 1 100)
do
echo "$i"
done
- for循环(第二种形式)
for ((...;...;...))
do
...
done
举个例子
read -p "Input a num: " num
s=0
for ((i=1;i<=$num;i=i+1))
do
s=$(($s+$i))
done
echo "the sum is $s"