必须以 "# !/bin/bash" 开头,告诉系统这是一个bash shell脚本。注意#与!中间有空格。
可以用declare -i声明为数值类型,也可以用
var = $((数值运算)),注意是两个括号
test命令可以测试,可以利用测试的结果走后续流程。测试文件和文件属性还是比较方便的。
:~/test$ test -e nofile && echo "exist"||echo "not exit" not exit :~/test$ touch nofile :~/test$ test -e nofile && echo "exist"||echo "not exit" exist
常与if搭配使用,跟test差不多。
test命令的参数都可用; 判断两个变量是否相等时,==与=效果一样,习惯上一般用==,与一般的编程语言一致。 [ "$myname" == "VBird Tsai" ],[]两边必须有空格,一般都用引号, == 的两边也必须有空格。[]内部的每个组件都要用空格分割 :~/test$ [ -n "$HOME" ] && echo "exist"||echo "not exist" #测试HOME变量是否为空,-n参数与test相同,test的参数都可用 exist:~/test$ [ -n "$HOME1" ] && echo "exist"||echo "not exist" not exist:~/test$ myname="VBird Tsai":~/test$ [ "$myname" == "VBird Tsai1" ] && echo "=="||echo "!="!=:~/test$ [ "$myname" == "VBird Tsai" ] && echo "=="||echo "!="==shell script脚本可以像命令一样输入参数。在script中可以用一些特殊符号获取这些输入的参数。
./sh_test.sh input1 input2 input3 $0 $1 $2 $3$0:文件名$1:第一个参数$n:第n个参数$#:参数个数$@:所有参数,“$1” “$2” "$n"$*:所有参数,“$1 $2 $n" ,中间有空格 :~/test$ cat sh_test.sh # !bin/bash echo "shell script file name: $0" echo "input pera num: $#" echo "all pera:$@" echo "1st pera $1" echo "2st pera $2" :~/test$ ./sh_test.sh input1 input2 input3 shell script file name: ./sh_test.sh input pera num: 3 all pera:input1 input2 input3 1st pera input1 2st pera input2
shift具有去除变量的作用,向左移
:~/test$ cat sh_test.sh # !bin/bash echo "shell script file name: $0" echo "input pera num: $#" echo "all pera:$@" echo "1st pera $1" echo "2st pera $2" echo "2st pera $3" shift echo "shell script file name: $0" echo "input pera num: $#" echo "all pera:$@" echo "1st pera $1" echo "2st pera $2" echo "2st pera $3" shift 2 echo "shell script file name: $0" echo "input pera num: $#" echo "all pera:$@" echo "1st pera $1" echo "2st pera $2" echo "2st pera $3":~/test$ ./sh_test.sh input1 input2 input3shell script file name: ./sh_test.shinput pera num: 3all pera:input1 input2 input31st pera input12st pera input22st pera input3shell script file name: ./sh_test.shinput pera num: 2all pera:input2 input31st pera input22st pera input32st pera shell script file name: ./sh_test.shinput pera num: 0all pera:1st pera 2st pera 2st pera
1.单层判断形式
if [条件判断式] then 指令fi #if倒着写,表示结束
2.多个判断条件
可以用 或||,与&&逻辑连接,if [条件1]||[条件2]
多层判断形式
if [条件判断式] then 指令else 指令fi if [条件判断式] then 指令elif [条件判断式] then 指令else 指令fi
esac是case反着写。
:~/test$ cat case_test.sh # !bin/bashcase $1 in "1") echo "input value 1" ;; "2") echo "input value 2" ;; *) echo "input too large" ;; esac:~/test$ ./case_test.sh 1input value 1:~/test$ ./case_test.sh 2input value 2:~/test$ ./case_test.sh 3input too large与一般程序语言里的函数类似。
:~/test$ cat function_test.sh # !bin/bash function show_pere(){ echo "input value $1" #函数也可以传输参数,注意,不是shell script的参数 } case $1 in "1") show_pere 1 #1是函数的输入参数 ;; "2") show_pere 2 ;; *) echo "input too large" ;; esac:~/test$ ./function_test.sh 1input value 1:~/test$ ./function_test.sh 2input value 2:~/test$ ./function_test.sh 3input too large
for有两种形式:
for var in var1 var2 var3 #循环时,var依次取var1、var2、var3 do 代码段 done:~/test$ cat for1_test.sh # !bin/bashfor var in $(seq 1 5) #注意var前面没有$do echo "$var"done:~/test$ sh for1_test.sh 12345for ((初始值;限定值;执行步阶)) #与C语言的几乎一样do 代码段 doneliuwanpeng@liuwanpeng-virtual-machine:~/test$ cat for2_test.sh # !bin/bashread -p "calculate sum for 1,2,....to your input:" nsum=0for ((i=1;i<=$n;i=i+1))do sum=$(($sum+$i)) #sum前面没有$doneecho "sum=$sum" :~/test$ sh for2_test.sh calculate sum for 1,2,....to your input:10sum=55
sh [-xnv] script.sh-x:边执行,边显示已执行的脚本-n:不执行,只检查语法-v:执行前先显示脚本
shell script学习到此结束
转载于:https://www.cnblogs.com/liuwanpeng/p/6231584.html