变量在手shell不愁

Tuesday, March 24, 2020

指定脚本要使用的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[*]}
LinuxShell

条件一出shell不服

定时任务

comments powered by Disqus