如果你有了脚本,运行它有两种方法,
1:调用shell,并把文件名当成一个参数. $/bin/sh first
2:chmod +x file将文件设置为可执行,然后直接调用。但是有个问题就是如何让shell知道这个文件的位置?你可以通过设置PATH=$PATH:.或者编辑.bash_profile文件,亦或则cd到脚本程序的目录下,然后执行./first。让他知道文件的位置。
变量:
在默认情况下,所有的变量都被看做字符串并以字符串来存储,即使他们被赋值为数值也是如此,只是在需要时,shell会吧数值型字符串转换为对应的数值然后进行操作。
如果你想获得变量内容必须在前面加$.
关于变量的一个注意点:
形式if[ $timeofday = “yes” ],你不输入任何东西,直接键入enter,会报错。[= “yes” ]是个错误的语法,而如果你加了引号以后,就是[“ “ = “yes” ]的判断,没有问题。你必须对$timeofday 加一个引号,如形式if [ "$timeofday" = "yes" ]
test命令本身不会显示任何消息,它本身会有一个布尔值,但是可以通过 && 和|| 配合echo命令或 $?来展示
注意比较下面的几种例子,因为||/&&都具有短路效果,只要不能确定整个表达式的布尔值,就继续往下执行。
使用[]表判断时的注意点
1:中括号内的每个组件都需要用空格来分隔
2:中括号内的变量,最好用双引号来设置(上面变量中已经说原因了)
3:括号内的变量,最好用单引号或双引号来设置
4:条件类型分为3类:字符串比较,算术比较和文件有关的测试
控制结构
如果你不想then另起一行的话,注意then前面别忘了带分号。
if [判断表达式]; then
elif [判断表达式]; then
else [判断表达式]
fi
for循环
除了我们平常用的形式
for ((初始值; 限制值; 执行步长))
do
程序段
done
形式二,第一次循环$var=con1,第二次$var=con2
for var in con1 con2 con3...
do
程序段
done
通配符的for循环。
这个例子演示了$(command)语法, for命令的参数来自$()括号中的输出结果
for file in $(ls f*.sh);do
lpr $file
done
while condition
do
statement
done
until 循环
until condition
do
statement
done
case....esac判断,每一个变量的程序段最后都需要两个分号来表示该程序段的结束。最后的*)表示非上面情况下执行的程序段。
variable 即$变量大致有下面两种方式获得:
直接之行式:利用”script.sh variable”方式直接给$1变量赋以内容。
交互式:通过read命令让用户输入。
case variable in
pattern [ | pattern] ...) statements;;
pattern [ | pattern] ...) statements;;
*) statement ;;
…
esac
case "$timeofday" in
yes | y )
statement ;; ;;引号千万别忘记
[nN]* ) #通配符
statement;;
* )
statement;;
esac
function,函数后面跟实参的话,它跟shell脚本类似,函数名称为$0,后续的变量以$1,$2,$3....替换。
当函数被调用的时候,脚本程序位置参数($* , $@,$#,$1,$2)会被替换成为函数的参数,这也是你读取传递给函数的参数的方法。
function_name (){
statements
}
命令
break 跳出一层循环,后面跟分号
continue 跳到下一次循环继续进行
点(.) 我们可以在shell中临时设置一个环境变量,但是一旦你离开了脚本这些变量的值就会恢复到执行脚本以前的值,如果你想设置这些变量,而且让它在我们推出脚本以后仍旧有效的话,就执行.命令。注意你执行的时候因为它是一个命令,所以要用空格跟后面分开,
$ . ./env-set
eval 允许你对
exit shell脚本编程,0表示成功,退出码1~125是脚本程序可以使用的错误代码其余为保留含义。
printf 格式话输出printf "format string" parameter1 parameter2..空格作为字段分割符
set 设置参数变量,后面跟的是一组以空格分割的字符串,然后根据该字段分割符为每个位置参数设值
shift 参数变量左移一个位置$2->$1 $n->$n-1 $1和$n将不存在,$0不变,$*,$#,$@都变化
unset 删除变量和函数
$(command)
编写脚本程序时,我们经常想执行一条命令,然后把该命令的输出放到一个变量中,可以用$(command)实现,或者古老的`command`
$ set $(date) #给位置变量设置值
$ echo $(who)
算术扩展
使用declare定义变量的类型之后,才能进行加减运算。但是bash shell默认仅支持整数数据。数字运算可以使用”declare -i total=$firstnu*$secnu”,也可以通过方式var=$((运算内容))
$((...))扩展 x=$(($x+1))