我们在平时的编程学习中,或多或少,或早或晚,都要接触到linux服务器;
熟练掌握shell编程技术,是从小白变大牛的必经之路!
通过本文知识,让我们花5分钟时间彻底搞懂shell编程,相信聪明的你,看完一定会有收获!
【正文开始】
什么是shell?
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 编程跟 JAVAScript 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Shell 种类有很多,最常用的的是:Bourne AgAIn Shell(即:/bin/bash,基本等同 /bin/sh),它非常易用且完全免费,是大多数Linux 系统默认的 Shell
大家常见的shell脚本的第一行内容是: #!/bin/bash
这一句就是告诉系统需要使用 /bin/bash 脚本解释器来执行。
编写第一个shell脚本实例: vim test.sh
然后输入:
#!/bin/bash
echo "Hello World !"
# 运行 Shell 脚本的两种方法:
1、作为可执行程序
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #直接执行脚本(./不可省略,表示在当前目录查找,否则默认去环境变量PATH里找)
2、作为解释器参数
例1: /bin/sh test.sh
例2: /bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息(写了也没用)
# shell的注释
单行注释: #
多行注释:
<
注释内容...
注释内容...
注释内容...
EOF
# 变量操作
定义:
str=abcd
注意: 变量名str和等号之间不能有空格(否则报错:变量名未找到命令),不能有特殊符号(?*),不能以数字开头(可以使用下划线和大写)
使用:${变量名} (大括号虽然是可选的,但是推荐用)(有利于区分边界,防止意外情况)
只读: readonly 变量名 (没有大括号)
删除: unset 变量名 (删除后不能再用,不能删除只读变量)
# 字符串操作
str="abcd"
取长:echo ${#str} # 输出 4
截取: echo ${str:1:5} # 输出 bcd(不会报越界)
拼接:echo ${str}'abc' # 输出 abcabc
查找:echo `expr index "$str" cd` # 输出3(注意必须是反引号)
判空:if test $str # 等价于 if [ $str ]
判等:if test $str = "abcd" # 等价于 if [ $str = "abcd" ]
# 数组操作
共3种定义方式:
1)array_name=(value0 value1 value2 value3)
2)array_name=(
value0
value1
value2
value3
)
3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组: valuen=${array_name[n]}
获取数组所有元素:echo ${array_name[@]}
获取数组长度: length=${#array_name[@]}
# 自定义函数的实现
定义:
func1(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
}
调用: func1 p1 p2
# 条件的处理
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
# 循环的处理
1)for的写法
for var in item1 item2 ... itemN
do
...
done
一个例子:
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
2)while 的写法
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
## 文件测试运算符
操作符 说明 举例
-e 检测文件(包括目录)是否存在
-d 检测文件是否是目录
-r 检测文件是否可读
-w 检测文件是否可写
-x 检测文件是否可执行
-s 检测文件是否为空(文件大小是否大于0),不为空返回 true
-b 检测文件是否是块设备文件,
-c 检测文件是否是字符设备文件
-p 检测文件是否是管道文件
-l 检测文件是否存在并且是一个符号链接。
-f 检测文件是否是普通文件(既不是目录,也不是设备文件)
-g 检测文件是否设置了 SGID 位
-u 检测文件是否设置了 SUID 位
-k 检测文件是否设置了粘着位(Sticky Bit)
-S: 检测某文件是否是 socket。
一个示例:
file="test.sh"
if test -r $file
then
echo "文件可读"
else
echo "文件不可读"
fi
【全文完】