shell学习笔记
什么是shell?
shell是运行在linux服务器上的用c语言编写的程序,即可以是服务器端的命令语言,也可以是程序设计语言(shell script)。平时所说的shell,多指在shell的界面端进行shell script编程。
shell脚本的执行过程
bash 程序目录/程序文件.sh
sh 程序目录/程序文件.sh
./程序文件.sh
shell的注释,#号。shell不支持多行注释
___________________________________________________________________________________________________________________________
shell的字符串
shell的hello world:
#!/bin/bash //第一行的#!是一个约定语言,告诉系统用哪一种shell来执行
echo "Hello World !"
bash 程序文件.sh
shell的变量:
say_hello=“Hello,I am shell script”
变量的使用:
echo $say_hello
echo ${say_hello}
只读变量
readonly MVP=‘stephen curry’ //定义为只读变量,修改无效
删除变量
unset MVP //删除定义的MVP变量,不可删除只读变量
打印变量和字符串
mvp=“kevin durant”
echo “the nab 2016-2017 MVP is $mvp” //输出“the nab 2016-2017 MVP is kevin durant”,双引号输出字符和变量,单引号原样输出 字符。类似php
获取字符串长度
mvp=“kevin durant”
echo ${#mvp} //输出12
___________________________________________________________________________________________________________________________
shell的数组
shell仅支持一维数组,并且没有限定数组的大小
定义数组:
#style 1
playerlists=('curry' 'durant' 'green' )
#style 2
playerlists=(
'curry'
'durant'
'green'
)
#style 3
playerlists[0]='curry'
playerlists[1]='durant'
playerlists[2]='green'
读取数组元素
playerlists=('curry' 'durant' 'green' )
echo ${playerlists[2]} //green
获取数组个数
playerlists=('curry' 'durant' 'green' )
echo ${#playerlists[@]} //3
————————————————————————————————————————————————————————
脚本传递参数
bash first.sh hello world
vim first.sh
#!/bin/bash
echo “文件名称为$0”
echo “第一个参数为$1”
echo “第二个参数为$2”
其他与定义变量
$# //传递参数个数
$* //以字符串格式显示所有传递的参数
————————————————————————————————————————————————————————
shell 运算符
加法示例:
val=`expr 2 + 2 `
echo $val
详解:表达式不是被单引号所括起,是esc下面的“反单号”
反单号最前需要加上expr。
所有语法单量,需要用空格隔开,即:`expr num + num`
支持的算数运算符包含:+、-、*(表达式中需要加\反斜杠)、/、%
运算运算符有:
= //赋值,实例:$a=$b,将b的值赋值给了a
!= //比较相等[$a==$b]
== //比较不等[$a!=$b]
注意:件表达式要放在方括号之间
关系运算符
-eq //比较两个数是否相等。相等返回true。[ $a -eq $b ]。返回false
-nq //比较两个数是否不相等。不相等返回true。[ $a -nq $b ]。返回true
-lt //检测左边数是否小于右边数。
-gt //检测左边数是否大于右边数。
布尔运算
! //[ ! false ]
-o //or,或运算
-a //and,与运算
逻辑运算
&& //and
|| //or
————————————————————————————————————————————————————————
echo语句
普通打印:
echo “word”
显示命令执行结果:
echo `date` //date是linux服务器关键字
————————————————————————————————————————————————————————
test命令
test:用于检测某个命令条件是否成立,可以是数值、字符、文件三个方面的测试
格式:
a=“hello”
b=“world”
if test $[a] -eq $[b]
the
echo ‘yes’
else
echo ‘no’
fi
————————————————————————————————————————————————————————
流程控制
if-else:
if condition
then
command1
else
command2 //流程控制不能为空(和php等其他语言区别)
fi
if-elif-else:
if condition
then
command1
elif condition
then
command2
else
command3
fi
for循环:
#! bin/sh
for((i=1; i<=100; i++))
do
echo $i //输出1-100
done
~
exit
while循环:
while condtion
do
command
done
无限循环格式:
while :
do
command
done
————————————————————————————————————————————————
方法使用
普通输出:
#! bin/sh
function sayhello(){
echo 'hello china'
}
echo '------begin------'
sayhello
echo '------end--------'
传值:
#! bin/sh
warriors(){
echo 'c:'.$1
echo 'cg:'.$2
echo 'pg:'.${3}
echo 'pf'.$4
}
warriors mcGee curry thompson durant
c:.mcGee
cg:.curry
pg:.thompson
pf.durant
返回值:
#! bin/sh
jia(){
return $(( $1 + $2 ))
}
jia 2 4
echo "2+4= $? "
————————————————————————————————————————————————
文件引用
. filename #注意,(.)和文件名之间有个空格
或
source filename