新建一个myshell文件
在这个文件下写一个shell脚本
bash 文件名 # 打印文件内容
#内容
多行注释
:<<!
内容
!
1.定义变量:变量名=变量值 2.撤销变量:unset 变量名 3.声明静态变量:readonly 变量名. 静态变量不能unset
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头 2.等号两侧不能有空格 3.变量名称一般习惯为大写
1.A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量 A
2.A=$(ls -la) 等价于反引号
1.export 变量名=变量值 将shell变量输出给环境变量 2.source 配置文件 让修改后的配置信息立即生效 3.echo $变量值 查看环境变量的值
介绍
基本语法
1. $n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) 2. $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) 3. $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) 4. $#(功能描述:这个变量代表命令行中所有参数的个数)
就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行失败)
1.$((运算式)) 2.$[运算式] 3.`expr m + n` 特点:运算符之间要有空格 + - / % * ( )
[ 条件 ] 注意:条件前后要有空格
特别的:
[ 非空 ] 为true
[] 为false
[ haha ] && echo true || echo false
判断语句
字符串比较
= 判等
!= 判不相等
-lt 小于 -le 小于等于 -gt 大于 -ge 大于等于 -eg 等于 -ne 不等于
-r 有读的权限 [ -r 文件 ] -w 有写的权限 -x 有执行权限
文件类型判断
-f 存在并且是一般文件 [-f 文件] -e 文件存在 -d 存在并且是一个目录
if判断
基本语法
if [ 条件 ] then 代码 fi
if [ 条件 ] then 代码 else 代码 fi
if [ 条件 ] then 代码 elif [ 条件 ] then 代码 else 代码 fi
case 选择分支
基本语法(相当诡异,令人发指,what a fuck)
case $变量名 in '值1') 代码 ;; '值2') 代码 ;; *) 代码 都没命中执行 ;; esac
for循环
遍历
基本语法
for 变量 in 值1 值2 值3 do 代码 done
循环
基本语法
for {{初始值;循环条件;变量变化}} do 代码 done
while循环
while [ 条件 ] do 代码 done
与用户交互
基本语法
read 选项 变量 选项: -p:提示信息 -t:等待输入的时间
basename
基本语法
basename [pathname] [suffix]
获得路径最后一部分
如果指定的suffix,那么会去掉结果中suffix的部分
dirname
基本语法
dirname [pathname]
获得基础路径
自定义函数
基本语法
function 函数名(){ 代码; #参数使用:$1,$2,...,${10}... return xxx; } 调用: 函数名 值1 值2