Shell 极简教程

简介: Hello Worldvim hello_world.sh#!/bin/bashecho "Hello World !"chmod +x *.sh./hello_world.sh Hello,World!变量#!/bin/bashecho "Hello,World!"a=1b=`expr $a + 1`echo $b注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

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命令查看保留关键字)。
除了显式地直接赋值,还可以用语句给变量赋值

函数

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 之间必须要有空格,这跟大部分的编程语言不同。

字符串

数组

image.png

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

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

另外,通过

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

可以访问数组所有元素。

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

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"
相关文章
|
7月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】Linux 创建网络连接 nc命令 使用教程
【Shell 命令集合 网络通讯 】Linux 创建网络连接 nc命令 使用教程
261 1
|
7月前
|
Linux Shell C语言
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
82 1
|
7月前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
【Shell 命令集合 磁盘维护 】Linux 管理硬盘分区 mpartition命令使用教程
114 1
|
7月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】Linux 设置和配置PPP pppsetup命令 使用教程
【Shell 命令集合 网络通讯 】Linux 设置和配置PPP pppsetup命令 使用教程
221 0
|
7月前
|
缓存 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
175 0
|
7月前
|
Shell Linux API
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
【Shell 命令集合 磁盘维护 】Linux 查找指定目录下的所有符号链接文件 symlinks 命令使用教程
100 1
|
7月前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
112 0
|
7月前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个用作交换空间(swap space)的特殊文件或设备 mkswap命令使用教程
96 0
|
2月前
|
JavaScript 前端开发 Shell
Shell 教程
10月更文挑战第1天
32 4
|
5月前
|
JavaScript 前端开发 Shell
Shell 脚本编程保姆级教程(上)
Shell 脚本编程保姆级教程(上)