Linux Shell编程
基础语法
- 编写第一个Shell脚本
#!/bin/bash
echo “Hello World”
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
- 运行Shell脚本
/bin/sh test.sh
./test.sh
Shell变量
定义变量
定义变量时,变量名不加美元符号
your_name="Tom"
注意!变量名和等号之间不能有空格!
同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线(_)
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
- 直接引用
thatVar=varA - 间接引用
var=${!thatVar} - 将命令的结果分配给变量
var=ls -l
只读、删除
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"
结果如下:
/bin/sh: NAME: This variable is read only.
使用 unset 命令可以删除变量
unset variable_name
Shell传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
其运行结果如下:
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
特殊字符
Shell数组
数组中可以存放多个值;Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
Shell 数组用括号来表示,元素用"空格"符号分割开
array_name=(value1 value2 ... valuen)
读取数组
读取数组的一般格式如下:
${array_name[index]}
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
...
获取数组中的所有元素
使用 @ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
获取数组的长度
参考上文的特殊字符
echo "数组元素个数为: ${#my_array[*]}"
Shell运算符
数值关系运算符
逻辑运算符
字符串运算符
文件运算符
Shell test
test结构
# You do not need to use 'if statement'
v1="Toronto" v2="Beijing"
[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"
v1=123 v2=45
[[ "$v1" -gt "$v2" ]] && echo "$v1 is greater than $v2
Shell 流程控制
if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
实例:(与test结合使用)
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo '两个数字相等!'
else
echo '两个数字不相等!'
fi
for循环
for循环一般格式为:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
实例:
for str in 'This is a string'
do
echo $str
done
输出结果为:
This is a string
while循环
while condition
do
command
done
while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
TMOUT
该作用是在用户输入空闲一段时间后自动断开
#!/bin/bash
TMOUT=3
echo "What is your name?"
echo "You only have $TMOUT seconds to answer!"
read name
if [ $? -eq 0 ]; then
echo "Your name is $name"
else
echo "Timed out!"
exit 1
fi
这里要求用户在3秒内输入相应内容,否则则判定为超时