Hello World

vim hello_world.sh

#!/bin/bash
echo "Hello World !"

chmod +x *.sh
./hello_world.sh
Hello,World!

变量

#!/bin/bash
echo "Hello,World!"

a=1
b=`expr $a + 1`
echo $b

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
除了显式地直接赋值,还可以用语句给变量赋值

函数


Shell 极简教程_bash

Jietu20171118-235519.jpg

其中, $1 表示调用该函数传入的第1个参数。

17 say_nowtime(){
18 now_time=`date`
19 echo "$1 Say now time is: $now_time "
20 }
21
22 say_nowtime "Jack"

说明:

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。

运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

#!/bin/bash
echo "Hello,World!"

a=1
b=`expr $a + 1`
echo $b

需要注意的是,$a + 1 之间必须要有空格,这跟大部分的编程语言不同。

字符串

数组


Shell 极简教程_数组_02

image.png

需要注意的是,数组之间的元素时用空格隔开的,不是用的逗号。

访问数组元素的语法是: ${array[i]}

另外,通过

${array[*]}
${array[@]}

可以访问数组所有元素。

获取数组的长度 ${#array[*]} :


Shell 极简教程_bash_03

image.png

有几个特殊字符用来处理参数:

参数处理

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

for 循环

与其他编程语言类似,Shell支持for循环。
for循环一般格式为:

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done

写成一行:

for var in item1 item2 ... itemN; do command1; command2… done;

当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。
in列表是可选的,如果不用它,for循环使用命令行的位置参数。
例如,顺序输出当前列表中的数字:

for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

if else

if 语句语法格式:

if condition
then
command1
command2
...
commandN
fi

写成一行(适用于终端命令提示符):

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
详见:​​​http://www.runoob.com/linux/linux-shell-test.html​


源代码:

$ cat hello_world.sh 
#!/bin/bash
echo "Hello,World!"

a=1
b=`expr $a + 1`
echo $b



array=(1 2 3 4 5 "x" "y" "z")
echo ${array[*]}
echo ${array[@]}
echo "array[1] = ${array[1]}"
echo "array length = ${#array[*]}"


say_nowtime(){
now_time=`date`
echo "$1 Say now time is: $now_time "
}

say_nowtime "Jack"