1.HelloWorld
代码
#!/bin/bash
echo "Hello World"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
echo 命令用于向窗口输出文本
运行
# 将上面的代码保存为hw.sh并按:wq保存
[root@ruozedata001 learn_shell]# vim hello.sh
# 使脚本具有执行权限
[root@ruozedata001 learn_shell]# chmod u+x hello.sh
# 执行脚本
[root@ruozedata001 learn_shell]# ./hello.sh
Hello World
2.debug一下!shell debug模式
代码
#!/bin/bash -x
echo "Hello"
echo "World"
在#!/bin/bash
后添加-x
进入debug模式
运行
[root@ruozedata001 learn_shell]# vim helloWithDebug.sh
[root@ruozedata001 learn_shell]# chmod u+x helloWithDebug.sh
[root@ruozedata001 learn_shell]# ./helloWithDebug.sh
+ echo hello
hello
+ echo world
world
3.变量定义与引用
代码
#!/bin/bash
NAME="Rand"
DATE1="date"
DATE2=`date` #
echo "I am ${NAME}"
echo "I am $NAME"
echo ${DATE1}
echo ${DATE2}
使用 变量=“字符串” 来定义变量,注意变量名和等号之间不能有空格
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
在变量名前面加美元符号就可以使用变量($NAME),但最好使用美元符号再加大括号的方式( ${NAME} )
静态定义变量:
k=“v” ‘v’ v
动态定义变量(运行时才产生值):
k=`v` #使用反引号
运行
[root@ruozedata001 learn_shell]# vim var.sh
[root@ruozedata001 learn_shell]# chmod u+x var.sh
[root@ruozedata001 learn_shell]# ./var.sh
I am Rand
I am Rand
date
Sat Aug 24 19:52:32 CST 2019
4. 参数传递
代码
#!/bin/bash
echo "执行的文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数共有 $# 个"
echo "所有参数: $*"
echo "当前进程PID: $$"
运行
[root@ruozedata001 learn_shell]# vim param.sh
[root@ruozedata001 learn_shell]# chmod u+x param.sh
[root@ruozedata001 learn_shell]# ./param.sh java python c++
执行的文件名:./param.sh
第一个参数:java
第二个参数:python
参数共有 3 个
所有参数: java python c++
当前进程PID: 4087
5.数组
代码
#!/bin/bash
ARR=(java python c++ kotlin)
echo "打印所有元素: ${ARR[@]}"
echo "打印指定下标元素(下标从0开始) ${ARR[0]}"
echo "打印数组长度: ${#ARR[@]}"
运行
[root@ruozedata001 learn_shell]# vim array.sh
[root@ruozedata001 learn_shell]# chmod u+x array.sh
[root@ruozedata001 learn_shell]# ./array.sh
打印所有元素: java python c++ kotlin
打印指定下标元素(下标从0开始) java
打印数组长度: 4
note: 定义数组时成员必须用空格隔开
6.判断if-else&if-elseif
#!/bin/bash
# if-else
echo "if-else"
A="abc"
B="edf"
if [ ${A} == ${B} ]
then
echo "=="
else
echo "!="
fi
# if-esleif
echo "if-elseif"
A="abc"
B="def"
if [ "${A}" == "${B}" ]
then
echo "=="
elif [ "${A}" == "abc" ]
then
echo "==2"
else
echo "!="
fi
note:
- if 后面的 [ ] 前后元素均必须留空格
- == 前后也必须需要空格
运行
[root@ruozedata001 learn_shell]# vim if.sh
[root@ruozedata001 learn_shell]# chmod u+x if.sh
[[root@ruozedata001 learn_shell]# ./if.sh
if-else
!=
if-elseif
==2
7.循环for&while
代码
#!/bin/bash
echo "for 第一种用法"
for loop in 1 2 3 4 5
do
echo ${loop}
done
echo "for 第二种用法"
for ((i=1;i<=5;i++))
do
echo ${i}
done
echo "while 用法"
LOOP=1
while (($LOOP<=5))
do
echo ${LOOP}
# 每次循环LOOP加一
let "LOOP++"
done
运行
[root@ruozedata001 learn_shell]# vim loop.sh
[root@ruozedata001 learn_shell]# chmod u+x loop.sh
[root@ruozedata001 learn_shell]# ./loop.sh
for 第一种用法
1
2
3
4
5
for 第二种用法
1
2
3
4
5
while 用法
1
2
3
4
5
8.字符串分割
代码
#!/bin/bash
S="a,b,c,d,e"
# 固定写法
OLD_IFS="$IFS"
IFS=","
ARR=($S)
IFS="$OLD_IFS"
for X in ${ARR[*]}
do
echo $X
done
字符串分割写法是固定的,记住就行
运行
[root@ruozedata001 learn_shell]# vim split.sh
[root@ruozedata001 learn_shell]# chmod u+x split.sh
[root@ruozedata001 learn_shell]# ./split.sh
a
b
c
d
e
8.grep&sed&awk
grep 、sed、awk被称为linux中的"三剑客"。功能非常强大。
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理
可用参考这篇博文:
http://www.zsythink.net/archives/1336/