2020.8.31shell脚本

2024-02-24 23:59
文章标签 脚本 2020.8 31shell

本文主要是介绍2020.8.31shell脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

脚本编程Bash Shell
1.每一个shell要有头的定义,正常的是#!/bin/bash
2.打印:echo '要打印的东西'
3.三种调用方式:
定义好的脚本需要加权限 : chmod +x 脚本路径
(1)路径调用:如果在当前目录,则使用./test.sh 
否则:绝对路径/test.sh
(2)普通脚本执行:sh 脚本路径
(3)指定/bin/bash shell 执行:/bin/bash test.sh
注意:./test.sh 相当于
/bin/bash test.sh
4.变量:
(1)定义变量:
定义变量时,变量名不加美元符号$,变量名和等号之间不能有空格
不能使用标点符号,也不能使用bash里面的关键字
如:a=1
(2)使用变量
使用定义过的变量时,只要在变量名前面增加美元符号即可
如:echo $a
(3)变量名外的当有需要时变量名需要大括号进行区分,以及读值
如 a=1
echo $a
输出的结果为 1
a=1
echo '$a'
输出的结果为 $a
a=1
echo "$a"
输出的结果为 1
(4)只读变量
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变
例如:#!/bin/bash
a=1
echo $a
readonly a
a=2
echo $a
输出结果为:
(5)删除变量 unset命令
a=1
echo $a
unsert a
a=2
echo $a
输出结果为:
(6)变量类型:局部变量、环境变量、shell变量
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
(7)单引号和双引号
单引号中任何字符都会原样输出,所以单引号中的变量无意义,无法输出变量的值
双引号里可以有变量
双引号里可以出现转义字符
例如:
#!/bin/bash
a='你好,靓仔'
b='你好,靓仔'
echo $a
echo '$a'
echo "${a}"
输出结果为:
(8)获取字符串长度
#!/bin/bash
a='你好,靓仔'
b='你好,靓仔'
echo ${#a}
输出结果为:5
(9)提取字串
#!/bin/bash
a='你好,靓仔'
b='你好,靓仔'
echo ${a:1:4}
输出结果为:
第一个字符的索引值为0
(10)查找子字符串
#!/bin/bash
a='你好,靓仔'
b='你好,靓仔'
echo `expr index "a" 你 `
输出结果为:0
(11)Shell注释
:%s/^/#/g
还可以
:<<EOF
注释内容
注释内容
EOF
或者
:<<'
注释内容
注释内容
'
或者
:<<!
注释内容
注释内容
!
5.Shell数组
(1)定义数组
数组名=(值1 值2 值3 值4...)
使用@/*符号可以获取数组中的所有元素
例如: 
#!/bin/bash
a=(1 2 3 4)
echo ${a[2]}
echo ${a[@]}
echo ${a[*]}
结果为:3
1 2 3 4
1 2 3 4
(2)获取数组的长度
例如#!/bin/bash
a=(1 2 3 4)
length=${#a[@]}
echo $length
length=${#a[*]}
echo $length
结果为:4
4
6.传递参数
(1)例如:
#!/bin/bash
echo "Shell 传递参数"
echo "执行文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
为脚本设置可执行权限,并执行脚本
结果为:
(2)参数处理和说明
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-
显示Shell使用的当前选项,与 set命令 功能相同。
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
例如:
#!/bin/bash
echo "Shell 传递参数"
echo "执行文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"
echo "传递到脚本的参数个数:$#"
echo "传递的参数作为一个字符串显示:$*"
结果为:
(3)$*与$@异同
同:都是引用所有参数
异: 只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
例如:
#!/bin/bash
echo "演示\$*"
for i in "$*"; do
echo $i
done
echo "演示\$@"
for i in "$@"; do
echo $i
done
结果为:
7.Shell基本运算符
(1)算数运算符
#!/bin/bash
a=`expr 2 + 2`(此时时反引号)
echo "两数之和:$a"
结果为:4
注意:表达式和运算符之间要有空格
变量名和等号之间不能有空格
运算符
说明
举例
+
加法
`expr $a + $b` 结果为 30。
-
减法
`expr $a - $b` 结果为 -10。
*
乘法
`expr $a \* $b` 结果为  200。
/
除法
`expr $b / $a` 结果为 2。
%
取余
`expr $b % $a` 结果为 0。
=
赋值
a=$b 将把变量 b 的值赋给 a。
==
相等。用于比较两个数字,相同则返回 true。
[ $a == $b ] 返回 false。
!=
不相等。用于比较两个数字,不相同则返回 true。
[ $a != $b ] 返回 true。
例如:
#!/bin/bash
a=520
b=1314
d=520
c=`expr $a + $b`
echo "a + b : $c"
c=`expr $a - $b`
echo "a - b : $c"
c=`expr $a \* $b`
echo "a * b : $c"
c=`expr $a / $b`
echo "a / b: $c"
c=`expr $a % $b`
echo "a % b: $c"
if [ $a == $d ]
then
echo "a等于d"
fi
if [ $a != $b ]
then
echo "a不等于b"
fi
结果为:
注意:乘号*前面必须添加反斜杠\才能进行乘法运算
(2)关系运算符(只支持数字,不支持字符串,除非字符串的值是数字)
运算符
说明
举例
-eq
检测两个数是否相等,相等返回 true。
[ $a -eq $b ] 返回 false。
-ne
检测两个数是否不相等,不相等返回 true。
[ $a -ne $b ] 返回 true。
-gt
检测左边的数是否大于右边的,如果是,则返回 true。
[ $a -gt $b ] 返回 false。
-lt
检测左边的数是否小于右边的,如果是,则返回 true。
[ $a -lt $b ] 返回 true。
-ge
检测左边的数是否大于等于右边的,如果是,则返回 true。
[ $a -ge $b ] 返回 false。
-le
检测左边的数是否小于等于右边的,如果是,则返回 true。
[ $a -le $b ] 返回 true。
例如:
#!/bin/bash
a=1
b=2
c=2
if [ $b -eq $c ]
then
echo "b等于c"
else
echo "b不等于c "
fi
if [ $a -ne $b ]
then
echo "a不等于b"
fi
if [ $a -lt $b ]
then
echo "a小于b"
fi
if [ $c -gt $a ]
then
echo "c大于a"
fi
if [ $c -ge $a ]
then
echo "c大于或等于a"
fi
if [ $b -le $c ]
then
echo "b小于或等于c"
fi
结果为:
(3)布尔运算符和逻辑运算符
运算符
说明
举例
!
非运算,表达式为 true 则返回 false,否则返回 true。
[ ! false ] 返回 true。
-o
或运算,有一个表达式为 true 则返回 true。
[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a
与运算,两个表达式都为 true 才返回 true。
[ $a -lt 20 -a $b -gt 100 ] 返回 false。
优先级:!>-a>-o
运算符
说明
举例
&&
逻辑的 AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||
逻辑的 OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
#!/bin/bash
a=1
b=2
c=2
if [ $a -lt $b -a $a -lt $c ]
then
echo "判断为正"
else
echo "判断为错"
fi
if [ $a -gt $b -o $a -lt $c ]
then
echo "判断为正"
else
echo "判断为负"
fi
结果为
逻辑运算符同理
(4)字符串运算符
运算符
说明
举例
=
检测两个字符串是否相等,相等返回 true。
[ $a = $b ] 返回 false。
!=
检测两个字符串是否相等,不相等返回 true。
[ $a != $b ] 返回 true。
-z
检测字符串长度是否为0,为0返回 true。
[ -z $a ] 返回 false。
-n
检测字符串长度是否不为 0,不为 0 返回 true。
[ -n "$a" ] 返回 true。
$
检测字符串是否为空,不为空返回 true。
[ $a ] 返回 true。
#!/bin/bash
a='你是神魔恋'
b='憨批'
if [ $a = $b ]
then
echo "$a = $b: a等于b"
else
echo "$a != $b a不等于b"
fi
结果为:
8.read显示变量
read命令从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量
例如:
#!/bin/bash
read name
echo "$name 是猪"
结果为:
9.换行和不换行
echo "It is my love" > a.txt //将结果定向传文件
echo `date` // 显示命令执行结果
结果为 : Fri Aug 28 17:38:31 CST 2020
10.test命令
test相当于[]
例如:
if [ $a -eq $b ]
相当于
if test $a -eq $b
11.Shell 流程控制
(1)
if condition
then
command1
command2
....
fi
还可以写成一行,例如:
#!/bin/bash
a=1
b=2
if test $a -lt $b ; then echo "true";fi
(2)if else-if else语法格式
if condition1
then
command1
elif conditon2
then
command2
else
command3
fi
例如:
#!/bin/bash
a=1
b=2
c=3
if test $a -gt $b ; then echo "true";
elif test $b -lt $a ;then echo "true";
else
echo "false";
fi
(3)for循环(基本等同于java)
for var in item1 item2 .. itemN
do
comand1
comand2
...
comandN
done
例如:
#!/bin/bash
for (( a=1 ;a <= 10 ; a++ ))
do
echo $a
done
结果为:
(4)while语句
while ((condition))
do 
command
done
例如:
#!/bin/bash
a=1
while(( $a <= 10 ))
do
echo $a
let "a++"
done
也可以这样
#!/bin/bash
a=1
while test  $a -lt 10
do
echo $a
let "a++"
done
结果为:
(5)until循环
condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
until condition
do
command
done
例如:
#!/bin/bash
a=1
until test ! $a -lt 10
do
echo $a
let a++
done
结果为:
(6)case语句
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
例如:
#!/bin/bash
echo "请输入1到3之间的数字"
echo "你输入的数字为"
read a
case $a in
1)echo "你选择了1"
;;
2)echo "你选择了2"
;;
3)echo "你选择了3"
;;
*)echo "你没有输入1到3之间的数字"
;;
esac
结果为:
还可以配合break语句,可以跳出循环
#!/bin/bash
while :
do
echo "请输入1到3之间的数字"
echo "你输入的数字为"
read a
case $a in
1)echo "你选择了1"
;;
2)echo "你选择了2"
;;
3)echo "你选择了3"
;;
*)echo "你没有输入1到3之间的数字"
break
;;
esac
done
例如:
还有continue,跳过这段输出
(7)TMOUT
TMOUT变量用于设置Shell的过期时间,当TMOUT不为0时,Shell在TMOUT秒后将自动注销
例如:
-z 判断字符串是否为空
#!/bin/bash
TMOUT=6
echo -n "what's your name?"
read name
if test -z $name
then
echo "没有输入"
else
echo "你的名字是$name"
fi
结果为:
12.Shell 函数
(1)[function] 函数名(){函数体;}        可以有return语句,但只能return数值类型,不能返回字符串
#!/bin/bash
fun(){
具体内容
}
fun //调用函数
(2)$?仅对上一条指令负责,一旦函数返回后其返回值没有立刻保存到参数,那么它的返回值将不能再通过$?获得
例如:
#!/bin/bash
fu(){
return `expr 1 + 1`
}
fu
echo $?
echo $?
结果是 2
0
如果不调用函数,则结果都为 0 0
2.参数的传递:函数内部的参数列表只取决于调用函数时的参数列表,与脚本的参数无直接影响
补充:
1.变量的定义
(1)直接赋值发: a=1 b="abc" arr=(1 2 3 4)
(2)引用赋值法: b=$a c=${b}
c=a
${!c}
(3)引用变量的运算:
b=`expr $a + 1`
b=$(( $a + 1 ))
b=$[ $a + 1 ]
2.在判断条件中使用计算:在红括号内侧及运算符两边都加空格
3.数值型:大于:-gt, 小于:-lt,等于-eq或==,不等于-ne
4.字符串型:等于:=或== 不等于:!=,是否为空 -z 字符串
5.if条件语句可省略成 [[条件语句]] && 结果语句

这篇关于2020.8.31shell脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743803

相关文章

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1