linux之shell编程

          shell脚本的执行方式:

1、sh helloworld.sh
2、source helloworld.sh或 . helloworld.sh
3、使用脚本文件的绝对路径直接执行该脚本文件:/root/test/helloworld.sh(需要可执行权限)

最简单的shell编程:
第一步:打开文本编辑器
vim helloworld.sh
第二步:编写shell脚本
#!/bin/bash //指定shell解释器
echo 'hello world!' //shell命令,输出hello world!
第三部:执行shell脚本
source helloworld.sh
执行结果:hello world!

系統可接受的命令名称(command-name)可以从如下途径:
        * 明确路径所指定的外部命令
        * 命令別名(alias)
        * 自定功能(function)
        * shell 內建命令(built-in)
        * $PATH 之下的外部命令
$PATH可以在~/.bash_profile中去添加自己想要添加的命令路径,添加之后即可在任意路径下去执行,如果没有配置,则需要到指定路径下去执行
$PATH添加命令路径之后,系统在执行命令的时候会将该路径添加到搜索路径中去,如果未添加,则系统不会搜索该路径下的命令集。
 
shell中的变量可分为三种形式:系统变量,自定义变量,特殊变量
自定义变量:
shell中自定义变量通过 变量名=变量值 来定义,使用$变量名 来调用该变量,注意:定义变量的时候=前后不能有空格
如:name=zhangsan
echo $name
执行结果:zhangsan
使用unset 变量名取消已经定义的变量
系统变量:如PATH PWD SHELL 等 使用$系统变量名调用系统变量
特殊变量:
$#:表示参数的个数,常用于循环
$*:参数的内容
$$:当前shell进程的pid值
$?:前一命令返回的状态值(0为正常)
$0 表示当前脚本名称
$1 第一个参数
$2 第二个参数
$N 第N个参数
特殊变量的简单测试:
打开编辑器:
vim test.sh
编辑shell脚本:
#!/bin/bash
echo $#
echo $*
echo $$
echo $?
echo $0
echo $1
echo $2
echo $3
执行shell脚本:
sh test.sh
执行结果:
3
a b c
3242
0
test.sh
a
b
c

shell脚本中通过控制台输入,将输入传递给变量(类似java中的Scanner):
read -p "请输入你的变量值:" KEY 将你从控制台输入的值传递给变量KEY

shell脚本中也可以有控制语句if,case和循环语句for,while,用法和java类似,但是写法不一样:
简单的if语句:
#!/bin/bash
read -p "请输入你的姓名:" name
if [ $name=zhangsan ]
then
echo i am zhangsan
fi

数值比较实用的操作符:
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)

字符串之间比较使用的操作符:
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
-n: string 判定字符串是否为非空,若string为空字符串,则为false。 注: -n 亦可省略

文件测试操作符:
如:
[ -e /etc/hosts ]
echo $? 返回上一条命令的返回状态
1 1表示条件不成立,即/etc/hosts不是一个目录(事实上他是一个文件,而不是目录)
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-b:  该文件是否存在且为一个块设备文件
-L:  该文件是否存在且为一个链接文件

文件权限操作符:
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-s :测试该文件是否存在且为非空文件

两个简单的shell事例:
1、打印9*9乘法表:
linux之shell编程linux之shell编程

 
2、猜商品价格游戏:
linux之shell编程linux之shell编程