1.使用vim 创建hello.sh:
#!/bin/bash
echo "hello,world!!!"
每一个shell脚本都必须在首行打上 #!/bin/bash
代表此为脚本文件,且文件的后缀名为.sh 。
echo " "
为输出语句相当于Java的System.out.println(“”);
#
为单行注释 ,
:<
为多行注释
2.shell脚本运行的两种方式:
第一种 将.sh文件的用户权限添加一个可执行的权限 ./../../脚本名
使用 vim 创建一个shell脚本的 读写状态码为: -rw-r--r--. 1 root root 34 Aug 30 09:26 hello.sh
。因此需要给
chmod u+x hello.sh
使其变为 -rwxr--r--. 1 root root 34 Aug 30 09:26 hello.sh
再使用./../../脚本名
执行脚本,具体案例如下:
[root@0003 shcode]# ./hello.sh
hello,world!!!
第二种 直接使用sh 脚本文件
的命令运行(此方法可以不用修改文件权限):
[root@0003 shcode]# sh hello.sh
hello,world!!!
1.定义变量
#定义变量A
A=100
2.输出变量(输出变量需要在变量前添加 $ 符号)
#输出变量需要加上$
echo $A
echo "A=$A"
输出结果为:
100
A=100
3.撤销变量
#撤销变量A
unset A
echo "A=$A"
输出结果为:
A=
4.将命令返回数据赋予变量(1.将命令使用反引号``包起来 , 2.使用$()把命令包起来)
#将命令的返回值赋给变量
C=`date`
D=$(date)
echo "$C"
echo "$D"
$n $0 代表命令本身,$1-9 代表第一个到第九个的参数 ,10个以上的参数需要用大括号包含 ${10}。
echo "0=$0 1=$1 2=$2"
$* 代表这个命令行中所有的参数,且将这些参数看为一个整体。
echo "所有的参数=$*"
$@ 代表这个命令行中所有的参数,且将这些参数看为不同的个体。
echo "$@"
$# 代表这个命令行各个参数的信息。
echo "参数的个数=$#"
如上运行结果为:
[root@0003 shcode]# sh position.sh 170000 30000
0=position.sh 1=170000 2=30000
所有的参数=170000 30000
170000 30000
参数的个数=2
$$ 表示当前的进程编号
echo "当前执行的进程ID=$$"
$! 表示后台运行的进程编号
# 以后台运行一个脚本,并获取它的进程号
/opt/shcode/position.sh 30000 170000 &
echo "最后一个方式运行的进程id=$!"
$? 在脚本中 $? 上一个执行命令的状态,为0则表示成功,不为0则表示失败。
echo "执行的结果是=$?"
输出结果为:
[root@0003 shcode]# sh perVar.sh
当前执行的进程ID=5650
最后一个方式运行的进程id=5651
执行的结果是=0
[root@0003 shcode]# 0=/opt/shcode/position.sh 1=30000 2=170000
所有的参数=30000 170000
30000 170000
参数的个数=2
1.基本语法:
"$((运算式))"
或 "$[运算式]"
或 expr 运算式
# 计算(2+3)* 4 的值
RES1=$(((2+3)*4))
echo "res1=$RES1"
RES2=$[(2+3)*4]
echo "res2=$RES2"
输出结果:
res1=20
res2=20
2.注意事项:
(1)使用expr 运算式 中 运算式中的 运算符号要与其他元素之间有空个
(2) 该语法需要反引号 `` 包起来
(3)使用expr 运算式 中 乘、除、取余分别为 \*
/
%
列如:
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "res3=$RES3"
输出结果:
res3=20
3.参数运算:
# 求出命令行两个参数[整数]的和
SUM=$[$1+$2]
echo "sum = $SUM"
1) = 字符串比较
2) 两个整数比较
-It 小于
-Ie 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3)按照文件权限判断
-r 有读权限
-w 有写权限
-x 有可执行权限
4)按照文件类型判断
-f 按照文件类型进行判断
-e 文件存在
-d 文件存在并且是一个目录
**注意事项:**中括号中语句需要空格:if [ 判断语句 ]
,结尾要用 fi
结尾。
案例:
#!/bin/bash
#判断1 使用 = (等于)
if [ "1" = "1" ]
then
echo "equal"
fi
#判断2 使用 -ge (大于)
if [ 23 -ge 22 ]
then
echo "大于"
fi
#判断3 使用 -f (判断目录文件是否存在)
if [ -f /opt/shcode/hello.sh ]
then
echo "存在"
fi
结果:
[root@0003 shcode]# sh ifdemo.sh
equal
大于
存在
**附加:**如果if的中括号有内容则返回为真
#!/bin/bash
#判断1 使用 = (等于)
if [ aoeiwu ]
then
echo "true"
fi
结果为 : true
基本语法
#单分支
if [ 条件判断 ]
then
代码
fi
#多分支
if [ 条件判断 ]
then
代码
elif [ 条件判断 ]
then
代码
fi
案例:
#!/bin/bash
# 案例成绩及格判断
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
基本语法:
case 参数或变量 in
"值1")
语句1
;;
"值2")
语句2
;;
*) #其它
语句3
;;
esac #结束语句
基本语法1
for 变量 in "参数"或值
do
语句
done
案例:
#$* 是把输入的参数当做一个整体,所以只会输出一句话
for i in "$*"
do
echo "num is $i"
done
echo "============================================="
#$@ 是把输入的参当做不同的整体,所以会分开输出
for j in "$@"
do
echo "num is $j"
done
输出结果
[root@0003 shcode]# sh testFor1.sh 100 200 300 400 500
num is 100 200 300 400 500
=============================================
num is 100
num is 200
num is 300
num is 400
num is 500
基本语法2
for(( i=整数; i<=整数; i++ )) #注意:括号中语句注意与括号隔开一个空格
do
语句
done
案例:
#输出0 从加1 一直到 加100 的和
SUM=0
for(( i=1; i<=100; i++ ))
do
SUM=$[$SUM+$i]
done
echo "$SUM"
结果:
[root@0003 shcode]# ./testFor2.sh
5050
基本语法:
while [ 条件语句 ] #条件语句与中括号间要有一个空格
do
执行语句
done
案例:
# 输入一个参数,统计从1+...一直加到该参数的和是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "结果=$SUM"
结果:
[root@0003 shcode]# ./testWhile.sh 2
结果=3
基本语法:
read -p "输出内容" 变量 #控制台输入的内容会传递赋予这个变量(不输出不结束)
read -t 等待秒数 -p "输出内容" 变量 #等待秒数过了之后或者控制台输入过了结束脚本执行
案例:
#读取控制台输入的NUM1的值
read -p "输入一个数NUM1=" NUM1
echo "你的输入为 $NUM1"
#读取控制台输入的NUM值,在10秒内输入
read -t 10 -p "请在10秒内输入一个数" NUM
echo "你输入的数为 $NUM"
结果:
[root@0003 shcode]# ./testRead.sh
输入一个数NUM1=100
你的输入为 100
请在10秒内输入一个数120
你输入的数为 120
格式:basename [pathname] [suffix]
1.basename [string] [suffix]
(1)显示文件全名:
[root@0003 shcode]# basename /opt/shcode/hello.sh
hello.sh
(2)只显示文件名:
[root@0003 shcode]# basename /opt/shcode/hello.sh .sh
hello
基本语法:
[function] funname[()]
{
Action;
[return 返回值;] #有返回值需return,没有返回值不写return
}
案例:
# 计算输入两个参数的和(动态获取),getSum
#定义函数getSum
function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
#输入两个值
read -p "请输入第一个数" n1
read -p "请输入第二个数" n2
#调用定义函数
getSum $n1 $n2
结果:
[root@0003 shcode]# ./testFun.sh
请输入第一个数100
请输入第二个数120
和是=220