shell脚本的扩展名不影响脚本的执行,可以是.sh
,也可以是.php
(用php语言写的),.py
等
新建一个test.sh
文件,里面第一行一般是#!/bin/bash
。#!
是一个约定的标记,告诉系统这个脚本用什么解释器执行
例如test.sh文件内容如下:
#!/bin/bash
echo "hello"
那么执行这个脚本(执行之前需要添加可执行权限)的时候,就会向标准输出输出"hello":
只能有字母、数字、下划线组成,不能以数字开头
在变量前用$
即可
也可以在变量前用${变量名}
在变量前加上readonly
,变量就会变成只读,无法进行修改
在变量前使用unset
就可以删除变量,删除之后再引用就会无效(不会报错)
不能删除只读变量
1)在单引号括住的字符串无法引用变量,会原样输出
2)在单引号中无法使用转义字符
string="abcd"
echo ${#string} #输出4
或者:
echo ${#string[0]} #输出4
表示从第1个字符开始截取长度为4的字符:
string="i am fine"
echo ${string:1:4} #输出 am ,前后各有1个空格
bash只支持一维数组,不支持多维数组
用括号表示数组,数组元素用空格分开:
数组名=(value0 value1 value2)
${数组名[n]}
${数组名[@]}
${#数组名[@]}
或者:
${#数组名[*]}
${#数组名[n]} # n为下标
会输出历史执行过的命令
!!
重复执行上一条命令
!n
执行第n条历史命令
!字符串
执行最近的一条以该字符串开头的命令
!$
执行上一条命令的最后的参数
在~/bashrc
文件中写入alias 命令别名=原命令
,会永久生效,之后就可以使用这个别名进行执行命令,效果和原命令一样
使shell依次读入shell脚本文件中的命令并执行
ctrl R
: 在历史命令中搜索
ctrl a
:光标移动到命令行的开头
ctrl e
: 光标移动到命令行的结尾
>
正确输出(覆盖)
>>
正确输出(追加)
2>
错误输出(覆盖)
2>>
错误输出(追加)
<
输入重定向
<<
输入重定向