欢迎关注我的微信公众号【万能的小江江】
视频教程来自:https://www.bilibili.com/video/BV1hW41167NW
shell是一个命令行解释器,介于Linux内核和外层应用程序之间
shell脚本入门
脚本格式
- 脚本以
#!/bin/bash
开头(指定解释器,用sh也行) - sh的底层也是调用的bash(可以通过ll看)
- 可以通过
bash hello.sh
、sh hello.sh
执行(bash解析器帮你执行),用./hello.sh
可能会提示权限不够,要用chmod修改(相当于脚本自己执行)
#!/bin/bash
多命令处理
在目录下创建一个txt文件,在txt文件中增加一句话
#!/bin/bash
cd 路径 #可以绝对可以相对
touch xxx.txt
echo "要加入的文字" >> xxx.txt
shell中的变量
- 环境变量尽量大写
- bash中,变量默认类型都是字符串类型,无法直接进行数值运算
- 变量中如果有空格,需要用双引号或者单引号括起来
系统变量
常用系统变量
$HOME(主目录)、$PWD(当前目录)、$SHELL(SHELL解释器目录)、$USER(当前用户)
自定义变量
A=1 #中间不能有空格,定义变量
#这时候echo一下
echo $A #此时的A就会返回1
unset A #撤销,撤销后echo就不会有值了
声明静态变量
readonly 变量名,静态变量不能unset
readonly B=3
echo $B
全局变量
export 变量名,可供其他shell程序使用
之后就可以声明为全局变量了
特殊变量:$n
基本语法
$n
n是数字,$0代表脚本的名称,$1-$9代表脚本第1-9个参数,10以上的参数,需要用大括号包括,如${10}
#!/bin/bash
echo "$0 $1 $2 $3"
#测试
root@Beijing:~/scripts# bash $n.sh 1 2 3 4 5 6
.sh 1 2 3
特殊变量:$
基本语法
$#
显示参数的数量,可以与上面的一起用
特殊变量:$*、$@
基本语法
$*
这个变量代表命令行中所有的参数,$*把所有的参数看作一个整体
$@
这个变量也代表命令行中所有的参数,不过¥@把每个参数区分对待
特殊变量:$?
基本语法
$?
最后一次执行命令的返回状态,如果变量为0,则证明上个命令正确执行。如果为非0,则证明上一个命令执行不正确
运算符
基本语法
$((运算符))
或$[运算式]
- expr + - * / % 加 减 乘 除 求余 运算符间必须有空格
采用expr一步完成计算
#错误用法
expr 3+2
返回3+2
#正确用法
expr 3 + 2
返回5
expr 'expr 2 + 3' \* 4
采用$[运算符]方式
s = $[(2+3)*4]
echo $s
返回20
条件判断
基本语法
[ condition ](condition前后要有空格)
空为false,非空为true,[atguigu]返回true,[]返回false
常用判断条件
两个整数间比较
-lt
小于(less than)
-le
小于等于(less equal)
-eq
等于(equal)
-gt
大于(greater than)
-ge
大于等于(greater equal)
-ne
不等于(not equal)
按照文件权限
-r
读(read)
-w
写(write)
-x
执行(execute)
按照文件类型
-f
文件存在,并且是一个常规文件(file)
-e
文件存在(existence)
-d
文件存在并且是一个目录(directory)
例子
23是否大于等于22
[ 23 -ge 22 ] #两边要有空格 echo $? #看返回值是啥
hello.sh
是否有写权限[ -w hello.sh ] echo $?
某目录中的文件是否存在
[ -e 目录/文件名]
多条件判断
&&
表示前一条命令执行成功时,才执行后面一条命令||
表示上一条命令执行失败后,才执行下一条命令[ condition ] && echo OK || echo notOK [ condition ] && [] || echo notOK
流程控制
if判断
基本语法
if [ 条件判断式 ];then
程序
fi
#或者
if [ 条件判断式 ]
then
程序
fi
注意
- [ 条件判断式 ],中括号和条件判断式直接必须有空格
- if后面要有空格
例子
输入一个数字,如果是1,输出1;如果是2,输出2。如果是其他,什么也不输出
#!/bin/bash
if [ $1 -eq 1 ]
then
echo "1"
elif [$1 -eq 2 ]
then
echo "2"
fi
case语句
基本语法
case $变量名 in
"值1")
如果变量值等于值1.则执行程序1
;; #相当于break
"值2")
如果变量值等于2,则执行程序2
;;
.。。
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac结束
注意
- case行尾必须为单词in,每一个模式匹配必须以
)
结束 - 双分号
;;
表示命令序列结束,相当于java中的break *)
表示默认模式,相当于java中的default
例子
输入一个数字,如果是1,输出1;如果是2,输出2;如果是其他,输出other
#!/bin/bash
case $1 in
1)
echo 1
;;
2)
echo 2
;;
*)
echo other
;;
esac