每天都得进步,哪怕是一点!
shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求的以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序
①脚本以#!/bin/bash开头 【使用bash进行解释】
②脚本需要有可执行权限
①添加可执行权限,直接运行
②没有可执行权限,sh+脚本名【也可执行】
①Linux shell中的变量分为系统变量和用户自定义变量
②常用的系统变量有:$HOME $PWD $SHELL $USER 等
③命令行中使用 set
可以查看当前shell中所有的变量
①定义变量:变量名=值 【注意:声明变量时,等号两边不能有空格
】
②撤销变量:unset 变量名
③声明静态变量:readonly 变量 【注意:静态变量不能unset
】
①变量名称可以有字母,数字,下划线组成。不能以数字开头
②定义变量时,等号两边不能有空格
③变量名称一般为大写
①A=`ls -la` 【反引号】 运行里面的命令,并把结果返回给变量A
②A=$(ls -la) $符号等价于反引号
①export 变量名=变量值 【让shell变量输出为环境变量】
②source 配置文件 【让修改后的环境变量立即生效】
③echo $变量名 【查询环境变量的值】
6.代码注释
①单行注释 #
②多行注释
:< 内容
内容
!
当我们执行一个shell脚本时,如果希望获取命令行的参数信息,就可以使用位置参数变量,比如:./myShell.sh 100 200,这个就是一个执行shell的命令行,可以在myShell脚本中获取到参数信息
变量 | 说明 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表一个到第九个参数,十个或十个以上的的参数需要使用大括${10} |
$* | 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 功能描述:这个变量也代表命令行中所有的参数,$@把每个参数区分对待 |
$# | 功能描述:这个变量代表命令行中所有参数的个数 |
就是shell设计者事先已经定义好的变量,可以直接再shell脚本中使用
变量 | 说明 |
---|---|
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
$? | 最后一次执行的命令的返回状态,如果返回0,就代表该命令正确执行,非0就代表不正确执行 |
①$((运算式)) 或者 $[运算式]
②`expr m + n` 注意:需要用反引号引起来,运算符两边需要有空格
③* 注意乘号需要使用转义符号 \,其他符号正常使用
#!/bin/bash
#计算A加B的值
A=100
B=200
#方式一
echo "A+B= $(($A+$B))"
#方式二
echo "A+B= $[$A+$B]"
#方式三
echo "A+B= `expr $A + $B`"
#*乘号需要使用转义符
echo "A+B= `expr $A \* $B`"
①[ condition ] 注意condition前后需要有空格
②非空返回true,可以使用$?
验证,0为true,>1为false
③应用实例
[ hello ] 返回true
[] 返回false
④三元表达式:
[ condition ] && echo ok || echo nook
说明:条件判断为真输出ok,为假输出nook
重点
= 等于
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-r 可读
-w 可写
-x 可执行
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并且是一个目录
#!/bin/bash
#案例一:判断"ok" 是否等于 "ok"
if [ "ok" = "ok" ]
then
echo "相等equal"
fi
#案例二:判断 23 是否大于 22
if [ 23 -ge 22 ]
then
echo "23 大于 22"
fi
#案例三:判断当前目录下是否存在aaa.txt文件
if [ -e ./aaa.txt ]
then
echo "存在"
fi
注意:[ 条件判断式 ] 中两边都有空格
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
#!/bin/bash
#成绩通过位置参数获取
#输出成绩,如果大于60输出及格了,否则输出不及格
sorce=$1
if [ $sorce -ge 60 ]
then
echo "及格了"
elif [ $sorce -lt 60 ]
then
echo "不及格"
fi
case $变量名 in
"值1")
程序
;;
"值2")
程序
;;
* )
其他值进入此分支
;;
esac
#!/bin/bash
#输出数字,如果为1,输出周一,如果为2,输出周二,其他数字,输出其他
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
for 变量 in 值1 值2 值3
do
程序
done
#!/bin/bash
#求出位置参数的和
sum=0
for i in $@
do
sum=$[$sum+$i]
echo "$i"
done
echo "结果为 $sum"
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
#!/bin/bash
#求出1-100的和
sum=0
for ((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo "1-100的和为:$sum"
while [ 条件判断 ]
do
程序
done
#!/bin/bash
#输出一个数n,求出1-n的和
sum=0
n=$1
while [ $n -gt 0 ]
do
sum=$[$sum+$n]
n=$[$n-1]
done
echo "$sum"
read 【选项】(参数)
选项 | 说明 |
---|---|
-p | 指定读取值时的提示符 |
-t | 指定读取值时,等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 |
#!/bin/bash
#读取控制台的值
read -p "请输入一个值:" NUM1
echo "你输出的值为: $NUM1"
#!/bin/bash
#三秒钟后自动退出
read -t 3 -p "3秒内输入" NUM2
echo "$NUM2"
shell函数和其他编程语言一样,有系统函数,也可以自定义函数
①basename 【pathname】【suffix】
功能:返回完成路径最后 / 部分,常用于获取文件名
②dirname 文件绝对路径
功能:返回完成路径最后 / 的前面部分,常用于返回路径部分
[function] function[()]{
Action;
[return int;]
}
#!/bin/bash
#编写一个函数,用户计算两个数的和
function getSum(){
SUM=$[$N1+$N2]
echo "结果是:$SUM"
}
read -p "请输入第一个数:" N1
read -p "请输入第二个数:" N2
getSum $N1 $N2