指定脚本要使用的Shell
第一行 #!/bin/bash
,#!
叫做She-bang。
Shell 脚本注释以 #
开头。
以调试模式运行
bash -x test.sh
会把脚本运行时的细节打印出来,在出现错误时可以帮助我们排查问题所在。
定义变量
vim varable.sh
#!/bin/bash
message='hello world'
变量名是message
变量值是 hello world
注意:等号两边不加空格。
echo : 显示内容
插入换行符,-e
参数。\n
表示换行。
echo -e "hello world\nHello world"
显示变量
在bash脚本中,若要显示一个变量,echo后接变量名还不够,必须在变量名前加上美元符号 $
#!/bin/bash
message='hello world'
echo $message
定义变量的时候不需要加美元符号,使用变量时,要加上美元符号。
引号
单引号:变量被包含在单引号里,变量不会被解析。单引号忽略被它括起来的所有特殊字符。
双引号:双引号忽略大多数特殊字符,不包括$
`
\
这三个不被忽略。Shell在双引号内部可以进行变量名替换。
反引号:
例如:
#!/bin/bash
message=`pwd`
echo "you are in the directory $message"
输出:you are in the directory /Users/wei
可以看到pwd的命令被执行了,结果被赋值给message变量。
read 请求输入
请求用户输入文本时,用到 read
命令。
read命令读取到的文本会立即储存在一个变量里。
read最简单的用法是后接一个变量名。
例如:
#!/bin/bash
read name
echo "Hello $name"
执行时,什么都没显示,可以输入文本,然后回车。
read读取了在终端的输入,将这个字符串赋值给name变量,才有后面输出。
同时给几个变量赋值
可以用read命令一次性给多个变量赋值。
例如:
#!/bin/bash
read firstname lastname
echo "hello $firstname $lastname"
read 命令一个单词一个单词读取输入的参数,并且把每个参数赋值给对应的变量。
-p 显示提示信息
例如:
#!/bin/bash
read -p 'please enter your name:' name
echo "hello $name"
-n 限制字符数
加上 -n 参数可以限制用户输入的字符串的最大长度。
例如:
#!/bin/bash
read -p 'please enter your name (5 characters max):' -n 5 name
echo "\nHello world $name"
-t 限制输入时间
用 -t 参数,可以限制用户的输入时间,意思就是超过这个时间,就不读取输入了。
例如:
#!/bin/bash
read -p 'please enter the code to defuse the bomb (you hava 5 seconds):' -t 5 code
echo -e "\nBoom!"
-s 隐藏输入内容
-s 参数可以隐藏输入内容
#!/bin/bash
read -p 'please enter your password:' -s password
echo -e "\nThanks,your password is $password"
数学运算
在bash中,所有的变量都是字符串。
bash本身不会操纵数字,也不会运算,可以用命令的方式来达到目的。需要用到let
命令。
例如:
#!/bin/bash
let "a = 5"
let "b = 2"
let "c = a + b"
echo "c = $c"
可用的运算符:加+ 减- 乘* 除/ 幂** 余%
参数变量
比如:./test.sh 参数1 参数2 参数3 。。。
参数被成为“参数变量”。
$# 包含参数的数目。
$0 包含被运行的脚本的名称。
$1 包含第一个参数。
$2 包含第二个参数。
…
$8 包含第八个参数。
#!/bin/bash
echo "you have executed $0,there are $# parameters"
echo "the first parameter is $1"
执行结果:
./1.sh a b c d
you have executed ./1.sh,there are 4 parameters
the first parameter is a
若有很多参数,可以用 “shift” 命令来挪移参数,依次处理。
例如:
#!/bin/bash
echo "the first parameter is $1"
shift
echo "the first parameter is now $1"
shift
echo "the first parameter is now $2"
测试:
./test.sh a b c d e
the first parameter is a
the first parameter is now b
the first parameter is now d
数组
数组是一种变量,可以包含多个“格子”(被称为‘数组的元素’)。
例如:
array=('value0''value1''value2')
访问value2的元素:${array[2]}
bash的数组的下标从0开始。
也可以单独给数组的元素赋值,例如:
array[3]='value3'
#!/bin/bash
array=('value0' 'value1' 'value2')
array[5]='value5'
echo ${array[1]}
数组可以包含任意大小的元素数目,数组的元素编号不需要是连续的
可以一次性显示数组中的所有元素值,用 *
#!/bin/bash
array=('value0' 'value1' 'value2')
array[5]='value5'
echo ${array[*]}