尚硅谷shell脚本
一:shell编程
1.1 shell编程快速入门-shell脚本的执行方式
脚本格式要求
脚本以#!/bin/bash开头
创建一个shell脚本,输出hello world!
cat /root/shell/hello.sh
#!/bin/bash
echo “hello world!”
chmod 744 hello.sh
./hello.sh #相对路径
/root/shell/hello.sh #绝对路径
方式2(sh+脚本)
1.2shell变量
shell变量的介绍
1)Linux Shell中的变量分为 系统变量和用户自定义变量
2)系统变量:\(HOME ,\)PWD ,\(SHELL,\)USER等等
比如echo $HOME等等
3)显示当前shell中所有变量: set
1.3shell变量的定义
基本语法:
1)定义变量:变量=值
2)撤销变量: unset变量
3)声明静态变量 readonly变量不能unset
unset :取消当前变量
1.4定义变量的规则
1)变量名称可以由字母,数字和下划线组成,但是不能以数字开头。
2)等号两侧不能有空格
3)变量名称一般习惯为大写
将命令的返回值赋给变量(重点)
1)A=ls-la
反引号,运行里面的命令,并把结果返回给变量A
RESULT=`ls -l /home`
echo $RESULT
2)A=$(ls-la)等价于反引号
MY_DATE=$(date)
echo $MY_DATE
1.5设置环境变量
基本语法
1)export 变量名=变量值 (功能描述,将shell变量输出为环境变量)
2)source 配置文件 (功能描述:让修改后的配置信息立即生效 )
3)echo $变量名 (功能描述: 查询环境变量的值)
快速入门
1)在/etc/profile文件中定义TOMCAT_HOME环境变量
2)查看环境变量TOMCAT_HOME的值
3)在另外一个shell程序中使用TOMCAT_HOME
注意:在输出TOMCAT_HOME环境变量前需要让其生效
source /etc/profile
多行注释
!<<!
RESULT
echo
MY_DATE
echo
!
1.6位置参数变量
介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以用到位置参数变化,比如, ./myshell.sh 100 200, 这个就是一个执行shell的命令行,可以在myshell脚本中获取到
基本语法:
$0
$n
$*
$@
$#
预定义变量
基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$ 当前进程的进程号
$! 后台运行的最后一个进程的进程号(PID)
$? 最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行,如果这个变量的值为非0,证明上个命令执行不正确
运算符:
基本语法
1):”$((运算式))”或“$[运算式]”
2) expr m + n
注意: expr运算符间要有空格
3) expr m - n
4) expr \*,/,% 乘,除,取余
请求出两个参数的和
SUM=$[$1+$2]
判断语句
基本语法
非空返回true,可使用$?验证(0为true,>1为false)
应用实例
[atguigu] 返回true
[] 返回false
[condition]&&echo OK ||echo notok 条件满足,执行后面的语句
条件判断
常用判断条件
1)两个整数的比较
=字符数比较
-lt小于
-le小于等于
-eq等于
-gt大于
-ge大于等于
-ne不等于
2)按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
3)按照文件类型判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
应用实例
判断ok 是否等于ok
if [ “ok” = “ok” ]
then
echo "equal"
fi
23是否大于等于22
if [ 23 -gt 22 ]
then
echo "大于"
fi
流程控制
if判断
基本语法
if[条件判断式];then
程序
fi
或者
if[条件判断式]
then
程序
elif[条件判断式]
then
程序
fi
注意事项: (1)[条件判断式],中括号和条件判断式之间必须有空格(2)推荐使用第二种方式
case语句
case $变量名 in
“值1”)
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
....省略其他分支.....
如果变量的值都不是以上的值,则执行此程序
;;
esac
#! /bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
for循环
基本语法1
for变量in 值1 值2 值3
do
程序
done
#!/bin/bash
#使用$*
for i in "$*"
do
echo "the num is $i"
done
chmod 744 testFor.sh
使用$@
for j in "$@"
do
echo "the num is $j"
done