Shell脚本学习总结
目录
脚本格式
输出
执行
多条命令处理实例
变量
常用系统变量
声明变量
撤销变量
声明静态(只读)变量
将变量提升为全局变量
特殊变量$n
特殊变量$#
特殊变量$*、$@
特殊变量$?
运算符
基本语法
实例
条件判断
基本语法
常用判断条件
实例
多条件判断
流程控制
if判断
case语句
for循环
while循环
read读取控制台输入
基本语法
函数
系统函数
实例
自定义函数
cut
基本用法
实例
sed
基本用法
实例
awk
基本用法
实例
sort
基本语法
实例
脚本格式
脚本以#!bin/bash开头
输出
echo ""
执行
使用"sh/bash 文件名"可以直接执行,直接使用文件名需要运行权限才可以执行
多条命令处理实例
#!/bin/bashcd /home/atguigu/
touch banzhang.txt
echo "I love cls" >> banzhang.txt
变量
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写
等号两边不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号或单引号括起来
常用系统变量
$HOME $PWD $SHELL $USER
声明变量
A=1
echo $A
撤销变量
unset A
声明静态(只读)变量
readonly B=3
静态变量不可unset,在系统重启后消失
将变量提升为全局变量
export B
特殊变量$n
$0为脚本名称,$1,$2,$3...为脚本第1,第2,第3个参数,超过10需要用${10}
#!/bin/bash
echo "$0 $1 $2 $3"
直接运行
bash parameter.sh
#输出:
parameter.sh
输入一个参数
bash parameter.sh banzhang
#输出:
parameter.sh banzhang
输入三个参数
bash parameter.sh banzhang love mm
#输出:
parameter.sh banzhang love mm
输入的参数多于三个时并不会报错,与输入三个时一致
特殊变量$#
#!/bin/bash
echo $#
bash parameter.sh banzhang love mm
#输出:
3
脚本名不算参数
特殊变量$*、$@
$*:代表命令行中所有的参数,把所有的参数看成一个整体
$@:代表命令行中所有的参数,把每个参数区分对待
#!/bin/bash
echo $#
echo $*
echo $@
bash parameter.sh banzhang love mm
#输出:
3
banzhang love mm
banzhang love mm
特殊变量$?
功能:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,有命令自己来决定),则证明上一个命令执行不正确。
parameter.sh
#敲回车后这条指令正确执行
echo $?
#输出
0
运算符
基本语法
“$((运算式))”或"$[运算式]"
expr +,-,\*,/,% 加,减,乘,除,取余 注意:expr运算符间要有空格
实例
expr 3 + 2
#输出
5
expr `expr 2 + 3` \* 4
#输出
20
s=$[(2+3)*4]
echo $s
#输出
20
条件判断
基本语法
[ condition ]
注意:condition前后要有空格,条件非空即为true。[ atguigu ]返回true,[]返回false
常用判断条件
=字符串比较
数之间的比较:
-lt小于 -le小于等于
-gt大于 -ge大于等于
-eq等于 -ne不等于
按照文件权限进行判断:
-r有读的权限 -w有写的权限
-x有执行的权限
按照文件类型进行判断:
-f文件存在并且是一个常规的文件
-e文件存在 -d是否是一个目录
实例
[ 23 -ge 22 ]
echo $?
#输出
0
#输出0代表正确执行,即为true;非0代表没有正确执行,即为false
[ -w helloworld.sh ]
echo $?
#输出
0
[ -e /home/atguigu/banzhang.txt ]
echo $?
#输出
0
多条件判断
&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败后,才执行下一条命令
[ condition ] && echo OK || echo notok
#condition为true时执行echo ok,为false时执行echo notok
流程控制
if判断
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意:[ 条件判断式 ]中括号和条件判断式之间必须有空格,if后面也要有空格
实例
#!/bin/bash
if [ $1 -eq 1 ];thenecho "banzhang zhen shuai"
elif[ $1 -eq 2 ];thenecho "cls zhen mei"
fi
bash if.sh 1
#输出
banzhang zhen shuai
bash if.sh 2
#输出
cls zhen mei
case语句
基本语法
case $变量名 in
"值1")
程序
;;
"值2")
程序
;;
*)
如果变量值都不是以上的值,则执行此程序
;;
esac
注意:case行尾必须为一个单词“in”,每个模式匹配必须以右括号“)”结束
实例
#!/bin/bash
case $1 in
1)echo "banzhang";;
2)echo "cls";;
*)echo "renyao";;
esac
base case.sh 2
#输出
cls
for循环
基本语法1
for(( 初始值;循环控制条件;变量变化 ))
do
程序
done
实例
#!/bin/bash
s=0
for((i=1;i<=100;i++))
dos=$[$s+$i]
done
echo $s
bash for.sh
#输出
5050
基本语法2
for 变量 in 值1 值2 值3...
do
程序
done
实例
#!/bin/bashfor i in "$*"do echo "banzhang xihuan $1"done
bash for2.sh mm cls xiaoze
#输出
banzhang xihuan mm cls boduo
#!/bin/bashfor i in $@do echo "banzhang xihuan $1"done
bash for2.sh mm cls xiaoze
#输出
banzhang xihuan mm
banzhang xihuan cls
banzhang xihuan boduo
当$*和$@都不加双引号""括起来时,都表示分开的所有参数
当都用双引号""括起来时$*会将所有参数合成一个整体作为的变量,$@仍然表示分开的所有参数
while循环
基本语法
while [ 条件判断式 ]
do
程序
done
实例
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
dos=$[$s + $i]i=$[$i + 1]
done
echo $s
bash while.sh
#输出
5050
read读取控制台输入
基本语法
read(选项)(参数)
选项:
-p:指定读值时的提示符
-t:指定读值时等待的时间(秒)
参数
变量:指定读取值的变量名
#!/bin/bash
read -t 7 -p "input your name " NAME
echo $NAME
bash read.sh
#显示
input your name
#输入
banzhang
#输出
banzhang
函数
系统函数
basename基本语法:
basename [string / pathname] [suffix]
作用:返回文件名
实例
basename /home/atguigu/banzhang.txt
#输出
banzhang.txt
basename /home/atguigu/banzhang.txt .txt
#输出
banzhang
dirname基本语法:
dirname 文件绝对路径
作用:返回文件绝对路径(去除文件名部分)
dirname /home/atguigu/banzhang.txt
#输出
/home/atguigu
自定义函数
[ function ] funname[()]
{
Action
[return int]
}
funname
注意:
必须在调用函数地方之前,先声明函数,shell脚本是逐行运行,不会想其他语言一样先编译
函数返回值只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果作为返回值。return后跟数值n(0-255)
function sum()
{s=0s=$[$1+$2]echo $s
}
read -p "input your parameter1:" P1
read -p "inout your parameter2": P2
sum $P1 $P2
bash sum.sh
#显示
input your parameter1:1
input your parameter2:2
#输出
cut
在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符字段输出
基本用法
cut [选项参数] filename
实例
cut -d " " -f 1 cut.txt
以空格切割,取第一列
cut -d " " -f 2,3 cut.txt
以空格切割,取第二、三列
x cat cut.txt | grep guan
查看cut.txt,并过滤出含有“guan”的行
cat cut.txt | grep guan | cut -d " " -f 1
查看cut.txt,并过滤出含有“guan”的行,然后对过滤结果进行切割
sed
对文件进行编辑处理并输出,但原文件内容不会改变
基本用法
sed [选项参数] 'command' filename
实例
sed "2a mei nv" sed.txt
在第二行插入“mei nv”,并打印出来,注意,sed.txt文件并没有被更改
sed "/wo/d" sed.txt
删除包含“wo”的行
sed "s/wo/ni/g" sed.txt
将所有wo替换成ni
sed -e "2d" -e "s/wo/ni/g" sed.txt
将第二行删除,并将wo替换成ni
awk
作用与cut类似
基本用法
awk [选项参数] 'pattern1{action1} pattern2{action2}...' filename
选项参数:
-F 指定输入文件的分隔符
-v 赋值一个用户定义变量
实例
awk -F : '/^root/ {print $7}' passwd
passwd文件以“:”分隔,选取以root开头的行,显示第7列
awk -F : '/^root/ {print $1","$7}' passwd
显示第1列和第7列,中间以“,”分隔
awk -F : 'BEGIN{print "user,shell"} {print &1","$7} END{print "dahaige,bin/zuishuai"}' passwd
打印文件的第1列和第7列,中间用“,”分隔,并在全文的开头插入“user,shell”,在末尾插入“dahaige,bin/zuishuai”
awk -F : -v i=1 '{print $3+i}' passwd
将文件的第3列所有数值加1并打印
awk -F : '{print FILENAME","NR","NF}' passwd
打印文件的文件名、已读的记录数、浏览记录的域的个数(切割后,列的个数)
sort
将文件进行排序并输出
基本语法
sort(选项)(参数)
实例
sort -t : -nrk 2 sort.sh
以“:”分隔,对第2列按数值大小进行倒叙排序
-t:设置分隔符
-n:按照数值大小排序
-r:逆序
-k:指定要排序的列
Shell脚本学习总结相关推荐
- Shell脚本(学习笔记1)
shell脚本学习记录 为什么学习shell脚本? 在一些复杂的linux维护工作过程中,大量的重复性的输入和交互操作不但费时费力,而且容易出现错误:然而编写shell脚本程序,可以批量处理.自动化的 ...
- BASH命令和SHELL脚本学习
BASH命令和SHELL脚本学习 转载于:https://www.cnblogs.com/huolong123/p/6228049.html
- shell 脚本学习及troubleshooting
shell 脚本学习及troubleshooting Shell问题一: $ FILENAME="My Document" 含有空格的文件名 $ ls $FILENAME 列出来试 ...
- Shell脚本学习-阶段二
文章目录-Shell脚本学习阶段二 前言 shell脚本实操2 1.获取随机字符串或数字 2.定义一个颜色输出字符串函数 3.批量创建用户 4.检查软件包是否安装 5.检查服务状态 6.检查主机存活状 ...
- linux shell脚本学习
linux shell脚本学习笔记 文章目录 linux shell脚本学习笔记 一.脚本入门 1.我的第一个linux脚本 2.关于date命令的知识 二.shell脚本中的变量 1.为什么脚本需要 ...
- shell脚本学习笔记一
又开始写学习笔记了,呵呵... 今年打算选择一门技术系统的学习一下.编程语言.虚拟机技术.数据库.大数据.云计算在这些种类中,我选择了shell编程.为什么选择shell呢?也没有什么具体的原因.以前 ...
- shell 脚本学习笔记
shell 脚本学习总结: 文件表达式 -e filename 如果 filename存在,则为真 -s file exists and has a size greater than zero. 判 ...
- linux命令封装sh,shell脚本学习之调用脚本将文件打包zip的方法示例
前言 本文主要给大家介绍的是关于调用脚本将文件打包zip的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍: 最近刚刚接触shell脚本,写了一点简单的练手.这里是用python调用脚本执行 ...
- Shell脚本学习-阶段三
文章目录-Shell学习阶段三 前言 1.用shell脚本批量建立Linux用户 2. 编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下: 3.通过ap ...
- Shell脚本学习指南(三)——文本处理工具
文章目录 排序文本 行的排序 以字段的排序 文本块排序 sort的效率 sort的稳定性 sort小结 删除重复 重新格式化段落 计算行数.字数以及字符数 打印 打印技术的演化 其他打印软件 提取开头 ...
最新文章
- angular2--pipe管道使用
- oracle vm中的xp添加共享文件夹
- docker mysql Exit 1
- 前端学习(909):navigater对象
- android布局属性,Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline...
- javascript-分支与循环
- 事务四大特性及隔离级别
- 第二周 SCRUM站立会议
- Linux学习总结(8)——VMware v12.1.1 专业版以及永久密钥
- linux usb 同步传输,从设备到主机的用户模式USB等时传输
- Python中的闭包总结
- linux上的smartsvn图形客户端,CentOS6.3下svn图形客户端smartsvn安装
- 三菱触摸屏程序和三菱PLC程序,程序都有注释
- wgs84坐标系经纬度投影_南方cass坐标转经纬度_坐标转经纬度软件
- 34岁华为员工跳槽央企,晒出年薪和工作时间,网友:羡慕了
- 微信小程序搜索关键词高亮效果(转)
- 如何实现电脑远程操控西门子触摸屏画面
- zzlibsvm / liblinear中的交叉训练技巧
- JAVA12_10总结
- 【opencv源码剖析】背景建模mog2
热门文章
- 基于深度学习的银行卡号识别项目(完整代码+数据可直接运行)
- Qin.Data发布及 使用说明
- 基于Java毕业设计智慧商店管理系统源码+系统+mysql+lw文档+部署软件
- 大型企业IT基础架构和应用运维体系
- Python自动化 —— 大麦网自动抢购原价演唱会门票
- 亲测有效详细教程!注册gmail得到验证码的方法
- 怎样创建一个uni-app项目
- 手机直播服务器系统,手机直播服务器
- python 读取合并单元格的excel_python 利用三方的xlrd模块读取excel文件,处理合并单元格...
- CV 长尾数据集-CIFAR-10/100,EEG等生理信号数据集整理