脚本编程职业教育(想学脚本编程)

2022年5月12日17:18:40脚本编程职业教育(想学脚本编程)已关闭评论

linux shell脚本编程

对于一些简单的操作,我们可以直接通过在linux 命令行执行就可以了,比如列出文件命令ls -l,但是有时候我们需要完成的任务需要连续执行多条linux命令,而且他们之间具有一定的执行逻辑,这时候直接通过命令行输入就不是一种比较好的办法了。

这时候我们可以利用linux shell的语法,编写脚本,主要的好处有两点,一方面可以编写复杂的执行逻辑,实现自动化,另一方面通用的脚本可以重复利用,而无需每次都手动编写命令。

开始linux shell编程非常简单,只需新建后缀名为.sh的文本文件第一行加

#!/bin/bash

然后执行

chmod +x test.sh # 给予test.sh可执行的权限
./test.sh        # 执行test.sh 也可以用bash test.sh

1.变量

linux shell变量定义不需要使用美元符,但使用的时候需要,{}可选但一般建议加,用在if判断的时候最好加双引号

#!/bin/bash 
a="hello world"
echo $a 
name="java"
echo ${name}script

#这里$str必须加双引号,否则会报错,因为$str为空的时候就变成了 if [ -n ]

if [ -n "$str" ]
then
	echo "$str为空"
fi 

单引号中的字符会原样输出,变量会失效,而双引号不会

变量也可以接受linux命令的结果,关键是要把命令用反引号包围起来

如将ping的结果赋值给变量

HOSTNAME=abc.com 
ping_str=`ping -c 4 ${HOSTNAME}`

1.2 一些常用特殊变量

$JAVA_HOME # java的环境变量如/usr/local/java/jdk1.8.0
$# #可以表示传入脚本的参数个数,也可以表示传入函数的参数个数
$? 显示最后命令的退出状态,0表示上一条命令执行正确无错误

值得注意的是$?表示的是上一条命令的退出状态,用它可以判断上一条命令执行是否成功,但是当函数中有多条命令的时候,用它无法判断函数是否出错,因为函数中间的语句出错【不影响】脚本会继续执行的时候,只要函数的最后一句没有出错,那么$?就会返回0

2.字符串和数组

2.1 字符串

shell中字符串可以不加引号,如直接
echo hello 
也可以使用单引号
echo 'hello'
var="world"
echo 'hello $var'
当然也可以双引号
echo "hello"
var="world"
echo "hello $var"
单引号中变量不会被解析,因此单引号不可以输出变量,双引号中可以输出变量
对字符串的常用操作
#获取字符串长度
str="acbdfd"
${#str}
#截取字符串
${str:1:3}
#查找字符串位置 注意是反引号
index=`expr index $str bc`

2.2 数组

数组定义
arr=(1 2 3 4 5)
#或者
arr[0]=1
arr[1]=2 
对数组的常用操作
#取元素
${arr[0]} # 取第0个元素
${arr[@]} # 取全部元素
#获取数组长度
${#arr[@]}
# 将某些命令返回的结果转为数组
arr=(`fdisk -l | grep -v identifier | grep Disk`)

#遍历数组

for var in ${arr[@]}
do
    echo $var
done

3.1 算术运算符

+ - * / = == !=
= == !=和其他语言没什么区别,关键是+ - * /不大一样,直接a=1+1没什么卵用,通常有三种做法
var=`expr 1 + 1 ` #注意数字和操作符之间要有空格
let var='1+1'     # 用let语法 数字和操作符之间不需要空格 不加引号也可以
var=$((1+2))      # 注意加$

用expr 这种方法时候*要加反斜杠转义

3.2关系运算符

-eq 相等返回true
-gt 前边大返回true -ge 大于等于
-lt 前边小返回true -le 小于等于

关系运算符只支持数字

3.3布尔运算符和逻辑运算符

! 不等
-o 或
-a 与
&& 且
|| 或

使用&&和||的时候,条件要用两个[],如[condition1] && [condition2] 或者[[ condition1 && condition2 ]]

3.4 shell特有运算符

有关字符串的

-z 字符串长度为0 返回true
-n 字符串长度不为0 返回true

判断相等与不等 可以用==和!=

有关文件的

-f 判断文件是否为普通文件 是返回true
-x 判断文件是否可执行 是返回true
-d 判断文件是否为目录 是返回true
-w 判断文件是否可写 是返回true
-r 判断文件是否可读 是返回true

4.函数

函数定义:可以省略function关键字,且参数不必在定义中体现,"#"表示传进来的参数个数,"1"表示第一个参数,"$2"表示第二个参数...

function doSomething(){
}

linux shell 的函数只能返回[0-255]的整数值,如果你想返回其他东西,如字符串,不要用return,要用echo,但是要注意,你拿变量接收echo的值的时候会接收你函数中所有echo的值,但很多时候这不是你想要的,所以需要注意。

5.流程控制

5.1 if-else

if [ $num -gt 100 ] && [ $num -lt 1000 ] 
then 
	echo "num大于100小于1000"
elif [ $num -gt 1000 ]
then 
	echo "num大于1000"
else 
	echo "小于100"
fi

完整语法如上,也可以像其他语言一样,只用if

if [ $num -eq 100 ]
then 
	echo "num 等于100"
fi 

要注意的是语法与我们常见的不同,then,fi都不要忘

[ 条件一 ] 条件不能与放括弧挨着,否则会报错

使用 && 是[ 条件一 ] &&

[ 条件二 ] 而不是 [ 条件一 && 条件二 ]

5.2 for循环和while循环

for var in 1 2 3 4 5 
do 
	echo "$var"
done 
for ((i=0;i<$num;i++))
do 
	echo "$i"
done 

注意形式二中圆括号是两个,想不懂为什么要这样

while (($i<5))
do 
	echo "$i"
	i=$(($i+1))
done 
while [ condition ]
do 
	echo "i am a while circle"
done 

注意第一种while循环中变量赋值

其他技巧 echo输出太单调?可以先定义几个日志函数,不同级别输出不同的颜色,如最基本的info输出蓝色,错误输出红色

function log_error(){
    echo -e "\033[31;40m[ERROR] $1 \033[0m"
}
function log_info(){
    echo -e "\033[40;36m[INFO] $1 \033[0m"
}

脚本编程职业教育(想学脚本编程)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至89291810@qq.com举报,一经查实,本站将立刻删除。