应用程序
又是 一种脚本语言
。Shell脚本
。Shell脚本
shell脚本 本质上是 linux 命令,一条一条命令根据逻辑按照Shell编程的语法规则组合在一起,实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。
脚本文件第一行为:#!/bin/bash 或 #!/bin/sh 等。作用为指定Shell解释器
脚本命名:一般以.sh
结尾。也可省略。
第一种方式
:在子shell窗口执行,由命令解释器执行,不需要赋予脚本执行权限
第二种方式
:在子shell窗口执行,由当前用户执行,脚本需要可执行权限
第三种方式
:在当前shell窗口执行。不需要赋予脚本执行权限
第四种方式
:需要将脚本添加到全局系统变量 PATH 中的特定路径下。
注意
:在当前shell窗口执行和子shell窗口执行的区别在于:变量的作用域
第一种
:
第二种
:
空格组成
时需用双引号
括起来不能
撤销
和 重写赋值
。(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
注意
,10以上表示为 ${n}。注意
:$*与$@区别在于使用for遍历"$*“时,只循环一次,值为所有参数集合。而使用for遍历”$@"时,循环次数为参数个数,值为对应的每个参数的值。
[root@demo01 桌面]# cat demo1
#!/bin/bash
echo '===============$n================='
echo $0
echo $1
echo $2
echo '===============$#================='
echo $#
echo '===============$*================='
echo $*
echo '===============$@================='
echo $@
[root@demo01 桌面]# sh demo1 1 2 3
===============$n=================
demo1
1
2
===============$#=================
3
===============$*=================
1 2 3
===============$@=================
1 2 3
[root@demo01 桌面]#
基本语法:expr 1 + 2,执行输出3
简写语法:$((运算式)) 或 $[运算式]
示例
expr 1 + 2 输出3
a=$(expr 1 + 2) $a=3 命令替换
a=`expr 1 + 2` $a=3 命令替换
echo $[1+2] 输出3
echo $((1+2)) 输出3
a=$[1+2] $a=3
基本语法:test condition --> 取返回值:$?
简写: [ condition ](注意 condition 前后要有空格)
。注意:条件非空即为 true,[ haha ]返回 true,[ ] 返回 false
示例:字符串之间用“=”判断相等,用“!=”判断不等
[root@demo01 桌面]# a=hello
[root@demo01 桌面]# [ $a = hello ]
[root@demo01 桌面]# echo $?
0
[root@demo01 桌面]# [ $a=Hello ]
[root@demo01 桌面]# echo $?
0
[root@demo01 桌面]#
逻辑运算符
(1)两个整数之间比较
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
(2)按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)
(4)是否为空
-z
多条件判断
[ atguigu ] && echo OK || echo notOK
[ condition -a condition ] 逻辑与and
[ condition -o condition ] 逻辑或or
if [ 条件判断式 ]
then 程序
fi
if [ 条件判断式 ]
then 程序
elif [ 条件判断式 ]
then 程序
else
程序
fi
[root@demo01 桌面]# cat demo2
#!/bin/sh
echo "====================根据第一个参数判断逻辑(if elif else fi)==================="
if [ "$1" = "1" ]
then
echo "我真帅!"
elif [ "$1" = "2" ]
then
echo "我真美!"
elif [ -z $1 ]
then
echo "参数为空!"
else
echo "其他参数逻辑!"
fi
echo "====================根据第一个参数判断逻辑(case in esac)==================="
case $1 in
"1")
echo "我真帅!" ;;
"2")
echo "我真美!" ;;
"")
echo "参数不存在!" ;;
*)
echo "其他参数逻辑!" ;;
esac
[root@demo01 桌面]# sh demo2 1
====================根据第一个参数判断逻辑(if elif else fi)===================
我真帅!
====================根据第一个参数判断逻辑(case in esac)===================
我真帅!
[root@demo01 桌面]# sh demo2 2
====================根据第一个参数判断逻辑(if elif else fi)===================
我真美!
====================根据第一个参数判断逻辑(case in esac)===================
我真美!
[root@demo01 桌面]# sh demo2 3
====================根据第一个参数判断逻辑(if elif else fi)===================
其他参数逻辑!
====================根据第一个参数判断逻辑(case in esac)===================
其他参数逻辑!
[root@demo01 桌面]# sh demo2
====================根据第一个参数判断逻辑(if elif else fi)===================
参数为空!
====================根据第一个参数判断逻辑(case in esac)===================
参数不存在!
[root@demo01 桌面]#
case $变量名 in
"值1")
如果变量的值等于值 1,则执行程序 1
;;
"值2")
如果变量的值等于值 2,则执行程序 2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
[root@demo01 桌面]# cat demo2
#!/bin/sh
echo "====================根据第一个参数判断逻辑(if elif else fi)==================="
if [ "$1" = "1" ]
then
echo "我真帅!"
elif [ "$1" = "2" ]
then
echo "我真美!"
elif [ -z $1 ]
then
echo "参数为空!"
else
echo "其他参数逻辑!"
fi
echo "====================根据第一个参数判断逻辑(case in esac)==================="
case $1 in
"1")
echo "我真帅!" ;;
"2")
echo "我真美!" ;;
"")
echo "参数不存在!" ;;
*)
echo "其他参数逻辑!" ;;
esac
[root@demo01 桌面]# sh demo2 1
====================根据第一个参数判断逻辑(if elif else fi)===================
我真帅!
====================根据第一个参数判断逻辑(case in esac)===================
我真帅!
[root@demo01 桌面]# sh demo2 2
====================根据第一个参数判断逻辑(if elif else fi)===================
我真美!
====================根据第一个参数判断逻辑(case in esac)===================
我真美!
[root@demo01 桌面]# sh demo2 3
====================根据第一个参数判断逻辑(if elif else fi)===================
其他参数逻辑!
====================根据第一个参数判断逻辑(case in esac)===================
其他参数逻辑!
[root@demo01 桌面]# sh demo2
====================根据第一个参数判断逻辑(if elif else fi)===================
参数为空!
====================根据第一个参数判断逻辑(case in esac)===================
参数不存在!
[root@demo01 桌面]#
基本语法
for(( 初始值;循环控制条件;变量变化))
do
程序
done
for i in 值1 值2 值3 注意:也可 for i in {1..100}
do
程序
done
[root@demo01 桌面]# cat demo3
#!/bin/bash
echo "============1)打印所有参数=================="
for item in "$@"
do
echo $item
done
echo '============2)比较$*和$@的区别=============='
echo '===================$*======================='
for item in "$*"
do
echo $item
done
echo '==================$@========================'
for item in "$@"
do
echo $item
done
echo "===========3)fori语法计算1到100的和========="
a=0
for ((i=1;i<=100;i++))
do
a=$(($a+$i))
done
echo "1到100相加的和为:$a"
echo "==============4)while语法:从1加到100==========="
a=1
sum=0
while [ $a -le 100 ]
do
sum=$(($sum+$a))
a=$(($a+1))
done
echo "1到100的和为:$sum"
[root@demo01 桌面]# sh demo3 1 2 3
============1)打印所有参数==================
1
2
3
============2)比较$*和$@的区别==============
===================$*=======================
1 2 3
==================$@========================
1
2
3
===========3)fori语法计算1到100的和=========
1到100相加的和为:5050
==============4)while语法:从1加到100===========
1到100的和为:5050
[root@demo01 桌面]#
基本语法
while [ 条件判断式 ]
do
程序
done
[root@demo01 桌面]# cat demo3
#!/bin/bash
echo "============1)打印所有参数=================="
for item in "$@"
do
echo $item
done
echo '============2)比较$*和$@的区别=============='
echo '===================$*======================='
for item in "$*"
do
echo $item
done
echo '==================$@========================'
for item in "$@"
do
echo $item
done
echo "===========3)fori语法计算1到100的和========="
a=0
for ((i=1;i<=100;i++))
do
a=$(($a+$i))
done
echo "1到100相加的和为:$a"
echo "==============4)while语法:从1加到100==========="
a=1
sum=0
while [ $a -le 100 ]
do
sum=$(($sum+$a))
a=$(($a+1))
done
echo "1到100的和为:$sum"
[root@demo01 桌面]# sh demo3 1 2 3
============1)打印所有参数==================
1
2
3
============2)比较$*和$@的区别==============
===================$*=======================
1 2 3
==================$@========================
1
2
3
===========3)fori语法计算1到100的和=========
1到100相加的和为:5050
==============4)while语法:从1加到100===========
1到100的和为:5050
[root@demo01 桌面]#
含义:一个简化、灵活、缩小版的脚本。命令、脚本是函数的集合。
分类:
内置命令:
外部命令:通常称之为工具
date +%y%m%d
basename [string / pathname] [suffix]
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
dirname 文件路径:去除 “/文件名” 后的路径
dirname :当前绝对路径
(1)基本语法
function funname()
{
Action;
[return int;]
}
[root@demo01 桌面]# cat demo4
#!/bin/bash
echo "========计算两个输入参数的和:自定义方法+控制台输入read==========";
function sum(){
echo "计算两个参数的和"
read -t 60 -p "请输入第一个参数:" AAA
if [ -z $AAA ]
then
echo "超时未输入参数,退出!"
return -1
fi
read -t 60 -p "请输入第二个参数:" BBB
if [ -z $BBB ]
then
echo "超时未输入参数,推出!"
return -1
fi
SUM=$(($AAA+$BBB))
echo "两数之和为:$SUM"
return 0
}
sum;
[root@demo01 桌面]# sh demo4
========计算两个输入参数的和:自定义方法+控制台输入read==========
计算两个参数的和
请输入第一个参数:15156
请输入第二个参数:5161
两数之和为:20317
[root@demo01 桌面]#