一---shell是什么?
shell是一个命令行解释器,是用户和linux内核之间的桥梁,用户可以用shell来启动,挂起,停止甚至编写一些程序。
比如mkdir /op/tt指令,不能直接拿给linux内核,而是先经过shell命令行解释器,等他翻译完了再交给内核。常用的是bash解释器。
二---shell脚本的执行方式:
脚本格式要求
1)脚本以#!/bin/bash开头
2)脚本需要有可执行权限。
脚本的常见执行方式:
1)输入脚本的绝对路径或相对路径(首先赋予脚本+x权限,才可执行)
相对路径:./hello.sh
绝对路径: /root/shcode/hello.sh
2)sh + 脚本(无需赋+x权限)
三---shell变量介绍:
1)shell中的变量分为系统变量和用户自定义的变量
2)系统变量:$HOME,$PWD,$SHELL,$USER等等,比如:echo $HOME
3)查看当前shell中所有变量 :set
A--shell变量的定义
基本语法
1)定义变量:变量名=值
2)撤销变量:unset变量
3)声明静态变量:readonly变量,注意:不能unset.
注:定义变量的时候不用加$,但输出变量的时候需要$.
B--规则:
1)不能以数字开头
2)=两遍不能有空格
3)变量名一般大写
C--将命令的返回值 赋给变量
1)A='date' 反引号,运行里面的命令,并把结果返回给变量A。
2)A=$(date)等价于反引号
D--设置环境变量(全局变量的别名)
基本语法:
1) export 变量名=变量值(将shell变量输出为环境变量(全局变量))
2)source 配置文件(让修改后的配置文件信息立即生效 )
E--shell脚本的多行注释:
:<<!
内容
!
F--位置参数:
当我们执行一个shell脚本的时候,如果希望获得命令行的参数信息,就可以使用到位置参数变量。
比如:./myshell.sh 100 200 这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息
基本语法:
$n(n为数字,0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数,需要用大括号包括,如${10})
$*(表示全部参数)
$#(参数个数)
$@(也代表每个参数,只不过把每个参数分开)
G--预定义变量
shell设计者事先设计的变量
基本语法:
$$ (当前的进程号PID)
$!(后台运行的最后一个进程的进程号)
$?(最后一次执行的命令的返回状态,0表示成功,其它失败)
四---Shell运算符
基本介绍:
学习如何在shell中进行各种运算操作
A--基本语法:
1)$((运算式)) $[运算式](推荐) 或者expr m + n
2)注意expr运算符之间要有空格,如果希望将expr的值赋给某个变量,使用``;
3)\* ,/,% 乘,除 ,取余
B--条件判断
[ condition ](注意condition前后有空格)
非空返回true,可使用$?验证(0为true,其它为false)
应用案例
[hhhh] 返回ture
[] 返回false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
C--判断语句:
常用判断条件
1)=字符串比较
2)两个整数的比较
-lt 小于 (little)
-le 小于等于
-gt 大于 (greater)
-ge 大于等于
-ne 不等于
3)按照文件权限进行判断
-r 读权限
-w 写权限
-x 可执行权限
4)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并且是一个目录
应用案例:
1)"ok"是否等于"ok"
if [ "ok" = "ok" ]
then
echo "equal"
fi
2)23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于"
fi
3)/root/shcode/aaa.txt目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
echo"存在"
fi
D--多条件判断格式:
if[ 条件判断式 ]
then
代码
elif[ 条件 ]
then
代码
fi
E--case语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
.....
*)
如果变量的值都不是以上的,执行此程序
;;
esac
应用案例:
编写testCase.sh脚本,如果输入是1就输出周一
,2就输出周二,其它值就输出其它
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其它日期"
esac
F--for循环:
基本语法1
for 变量 in 值1 值2 值3...
do
代码
done
基本语法2
for ((初始值;循环控制条件;变量变化))
do
代码
done
案例:输出1-100的和
SUM = 0
for((i = 0; i<=$1; i++))
do
SUM=$[ $SUM+$i ];
done
echo "sum is $SUM"