#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本 告诉系统说,就在当前目录找。
/bin/sh test.sh #指定解释器执行 这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
your_name="runoob.com"
注意,变量名和等号之间不能有空格
for file in `ls /etc`
或
for file in $(ls /etc)
以上语句将 /etc 下目录的文件名循环出来。
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
推荐给所有变量加上花括号,这是个好的编程习惯。
myUrl="https://www.google.com"
readonly myUrl ##只读变量
myUrl="https://www.runoob.com"
unset variable_name #删除变量 不能删除只读变量
字符串类型变量定义
双引号里可以有变量,可以出现转义字符;单引号里的任何字符都会原样输出
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
string="runoob is a great site" echo ${string:1:4} # 输出 unoo
string="abcd"
echo ${#string} #输出 4
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4; 反引号里表示执行命令
数组名=(值1 值2 ... 值n),数组元素用"空格"符号分割开
${数组名[下标]};
echo ${array_name[@]} #获取所有元素
# 取得数组元素的个数 length=${#array_name[@]}
可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,
# 单行注释
:<<! 注释内容... 注释内容... 注释内容... !
./test.sh 1 2 3 ##执行shell script时传入参数,在shell script中使用'$n'(n为一个数字)获取,'$0'默认是文件名,其后则为执行指定的参数
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
$* | 以一个单字符串显示所有向脚本传递的参数。 |
$# | 传递到脚本的参数个数 |
$* 与 $@ 区别:
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
val=`expr 2 + 2` #两数之和,还有其他算术运算符:-、*、/、%、=、==、!=。(乘号(*)前边必须加反斜杠()才能实现乘法运算)
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
条件表达式要放在方括号之间,并且要有空格,
关系运算符