[root@VM_234_23_centos ~]# vim hello.sh
---hello.sh
echo "Hello world!"
----
[root@VM_234_23_centos ~]#sh hello.sh
Hello world!
复制代码
有两种执行方式html
这个指令能够用来检测某些文件或者相关的属性,更多使用在命令行中输入man test以后,能看到相关参数的说明。linux
# 测试文件是否存在,单纯的test是不会返回执行结果的
[root@VM_234_23_centos ~]# test -e index.html
# 咱们能够根据上一次的执行结果来判断指令是否成功
[root@VM_234_23_centos ~]# echo $?
0
# 关于 &&(与) || (或)的操做
# PS shell里面好像没有指令的优先级这一说法,因此在处理逻辑运算时,要记得带小括号或者编写的顺序
[root@VM_234_23_centos ~]# test -e index.html && echo "file exist" || echo "Not exist"
file exist
复制代码
实际写一个指令,大概就能明白默认函数的位置了shell
/path/to/scirptname parm1 parm2 parm3 parm4
$0 $1 $2 $3 $4
复制代码
感受偏移就像是移动参数数组的下标vim
先编写一个程序centos
[root@VM_234_23_centos ~]vim shift_test.sh
echo "This program script name is : $0"
echo "Before Shift"
echo "This program paramters number is : $#"
echo "Your whole paramter is : $@"
echo "The first number is : $1"
echo "After Shift"
shift 3
echo "Your whole paramters number is : $#"
echo "Your whole paramter is : $@"
echo "The first number is : $1"
echo "End"
最后进行保存和退出:wq
复制代码
来看执行结果数组
[root@VM_234_23_centos ~]
sh shift_test.sh parm1 parm2 parm3 parm4 parm5 parm6
This program script name is : shift_test.sh #档名
Before Shift
This program paramters number is : 6 #参数数量
Your whole paramter is : parm1 parm2 parm3 parm4 parm5 parm6 #所有变量
The first number is : parm1
After Shift # 移动以后
Your whole paramters number is : 3 # 参数下标移动了,总数量也就相应变少了
Your whole paramter is : parm4 parm5 parm6
The first number is : parm4
End
复制代码
if条件成立的话,执行then以后的语句,格式以下:bash
if [条件判断式] ; the
xxxx # 条件成立时,能够进行的指令工做内容
fi # 反过来表示if语句段结束的意思
复制代码
条件判断式中,当有多个条件要判别时,经常使用如下两个:多线程
两种情形:成功或者失败函数
# 一个条件的判断,分为成功和失败的执行(else)
if [条件判断式 ]; then
成功语句
else
条件失败时执行的语句
fi
复制代码
多个条件oop
if [条件一] ; then
条件一成功时执行的语句
elif [条件二] ; then
条件二成功时执行的语句
else
以上条件都不成立时,执行这一条语句
fi
复制代码
以case开始,esac结束。具体语法以下
case ${变量名称} in
"第一个变量内容") #每一个变量内容建议使用双引号括起来,关键词为小括号 )
程序段
;; # 每一个类别结尾使用两个连续的分号来处理
"第二个变量内容")
程序段
;;
*) # 最后一个变量内容都会用 * 来表明全部其余值(有点像default节点hhh)
上面语句都没有执行的话,这段内容会被执行
exit 1
;;
esac # case的结尾,【反过来写】
复制代码
【函数(function)】,相似于一个定义执行指令的片断封装体,例如:
function fname() {
程序段
}
复制代码
注意点:shell script的执行方式是由上而下,由左而右,所以在shell script当中的function的设定必定要在程序的最前面。
例以下面例子,定义一个简单的打印函数,而后经过输入的参数进行case选择进行打印:
[root@VM_234_23_centos ~]vim test.sh
function printit() {
echo "Your choice is "
}
echo "This program will print yout selection !"
case ${1} in
"one")
printit; echo ${1} | tr 'a-z' 'A-Z' # 转换大小写
;;
"two")
printit; echo ${1} | tr 'a-z' 'A-Z'
;;
*)
echo "The param not match"
;;
esac
复制代码
保存以后,执行代码:
[root@VM_234_23_centos ~]sh test.sh one
This program will print yout selection !
Your choice is
ONE
复制代码
书本中也提到,一行代码的函数看起来的确有点鸡肋,可是能够封装多条指令,变成一个模块,抽象重复的代码,提升代码整洁度。
function也有内建变量,与shell script很相似,函数名称$0,后续变量是 $1,$2... ,但只在函数内生效噢~
循环能够不断的执行某个程序段落,知道用户设定的条件达成为止。
①:当condition条件成立时,就进行循环,直到condition的条件不成立才中止
while [condition] # 中括号内的状态就是判断式
do # 标志着循环的开始
程序段
done # 标志着循环的结束
复制代码
②:until
until [condition]
do
程序段
done
复制代码
这二者之间实际上是很相似的,区别在于,while循环时,至少会判断一次condition,而until运行到循环语句时,直接执行程序段,而后在第二次循环前再判断condition。
这种循环是知道要进行多少次循环,一般循环体是一个数组,对每个参数进行遍历处理。
①:foreach形式
for var in con1 con2 con3 ...
do
程序段
done
复制代码
②:自定义步长的处理
for ((初始值; 限定值; 执行步长 ))
do
程序段
done
例如:
for (( i = 1; i < ${number}; i = i + 1 ))
do
程序段
done
复制代码
跟日常的数组同样,经过下标来指定数组中每一个值,一样下标也是从0开始的哟~
[root@VM_234_23_centos ~]vim list.sh
function print_list() {
local numbers # 声明本地变量
numbers=(`echo "$@"`) # 将传参转回数组,不这样作的话,$1会被当成是一个总体字符哟
size=${#numbers[*]}
for (( i=0; i<${size}; i=i+1 ))
do
echo "The ${i} number is ${numbers[i]}"
done
}
list=(0 1 2 3 4)
print_list "${list[*]}" # 传递一个数组到方法中
[root@VM_234_23_centos ~]sh list.sh
The 0 number is 0
The 1 number is 1
The 2 number is 2
The 3 number is 3
The 4 number is 4
复制代码
上面的例子大概写了如何定义一个函数、将数组做为传参、在函数内将传参数组转化还有数组的for循环~