第一个shell
首先进入linux系统,打开命令行,输入命令vi test.sh创建一个shell测试脚本,键入i切换vi编辑器为输入模式,输入以下文本内容,键入:wq保存退出即可。下面第一行的#!是告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
#!/bin/bashecho "hello xiaojiang!"#### 执行shell脚本文件两种方法 ####1、给执行权限后,使用 ./ shell脚本文件名#2、直接bash shell脚本文件名#### shell模板三要素 ####!/bin/bash (解释执行环境)#脚本注释 (作者、创建时间、功能说明)#代码内容 (实现功能)
运行此shell脚本,切换到当前目录下,先输入chmod +x ./test.sh使脚本具有执行权限,再输入命令./test.sh执行脚本。
二、基础知识
变量命名规范跟以往其他编程语言的规范大致相同,shell编程的注释是#,而#!是特例
PS:shell编程不像其他编程语言,所以不要以平时代码习惯给赋值=两侧加空格,否则报错
myName="小江"//定义变量echo${myName}//使用变量readonly myName="小赵"//readonly命令声明变量为只读变量,则变量的值不允许被改变myName="小赵copy"//会报错提示unset命令撤销变量,不过不能撤销只读变量unsetmyNameexport myName//把变量提升为全局环境变量,可供其他shell程序使用//常用的系统变量$HOME//根目录$PWD//当前目录$SHELL//当前SHELL解释器$USER//当前系统用户//特殊变量$# //获取所有参数的个数,常用于循环$*//获取命令行的所有参数,相当于一个整体$@//获取命令行的所有参数,但不用于$*是把每个参数区分出来$?//返回上一条命令是否正确执行的状态,当输出为0是代表上一条命令正确执行,为truetest="abcd1234"echo${#test} //获取字符串的长度,输出8echo${test:4:7}//截止字符串,字符串下标从0开始数组的值用空格分开,下标也是从0开始arrayName=('小江''小林''小赵')${arrayName[1]}//输出小林${arrayName[@]}//输出数组所有值,小江 小林 小赵
shell的常用命令
man//这个命令就是相当于百科的作用,查询命令的使用方法,比如 man echocd~//返回家目录cd-//返回上一级目录history//查看输入的历史命令列表!!//重新执行上一次命令!p//会在历史命令中去模糊匹配最近一次有关p的命令并执行!62//62是history历史命令列表命令行号,!命令id就可以重新执行相关命令read-t 秒数-p 描述 参数//在控制台指定秒数内按照描述提示输入参数自动执行操作expr+-*///加减乘除运算 不过*要注意,得用转义字符\转义下,不然会认为*是匹配所有的符号,同时expr需要是整数以及都要有空格expr3\*9//输出结果:27echo-n"Date is :";date+%F//输出结果:Date is :2020-06-30|//管道>//重定向输入,覆盖原数据>>//重定向追加输入,在原数据的末尾添加<//重定向输出wc-w 文件名// 统计文件单词数echo$?//可以查看上一次命令是否执行成功,0表示成功系统函数bashname 文件绝对路径//截取路径剩下文件名dirname 文件绝对路径//截取路径除了文件名的路径
条件判断
判断表达式是[ 判断内容 ] PS:括号内两侧空格不能少整数比较 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于文件权限 -w 写权限 -r 读权限 -x 执行权限文件类型 -f 文件存在并是个常规文件 -e 文件存在 -d 文件存在并是个目录
for循环
for(( 初始值;循环控制条件;变量变化 )) PS:双括号内两侧空格不能少 do 程序 done
三、shell基础小案例
1、实现在指定目录下创建一个文本文件并在末尾追加内容进去
#!/bin/bash#小江;2020-09-10;实现在指定目录下创建一个文本文件并在末尾追加内容进去cd /root/shell_study/touch second_shell_create.txtecho "这是执行第二个shell脚本second_shell.sh生成的结果" >> second_shell_create.txt
2、用条件判断判断一个文件是否有写权限并输出状态
#!/bin/bash#小江,2020-09-11,用条件判断判断一个文件是否有写权限并输出状态[ -w second_shell.sh ]status=$?echo $?if [ ${status} -eq 0 ]then echo "该second_shell.sh文件具有写权限"else echo "该second_shell.sh文件不具有写权限"fi
3、使用case进行多分支条件传参判断性别
#!/bin/bash#小江,2020-09-11,使用case进行多分支条件判断case $1 in1) echo "男";;2) echo "女";;*) echo "未知";;esac
4、使用for循环累加1到100
#!/bin/bash#小江,2020-09-11,使用for循环累加1到100s=0for(( i=1;i<=100;i++ )) do s=$[$s+$i] doneecho "循环累加后的值为:"$s
5、使用for操作来新增人群名单
#!/bin/bash#小江,2020-09-11,使用for操作来新增人群名单,深入验证学习$*he$@的区别echo "PS: \$*会把传参当成一个整体,而\$@是会分成每个参数"for i in "$*" do echo $i doneecho "=========================="for j in "$@" do echo $j done
6、自定义函数实现sum求和两个参数
#!/bin/bash#小江,2020-09-11,自定义sum函数求和输入的两个参数值function sum(){ i=0; i=$[$1+$2] echo "自定义sum函数求和后结果为:"$i}read -p "输入第一个参数:" p1read -p "输入第二个参数:" p2sum $p1 $p2
四、大数据应用重点关注的4个shell工具命令
新建测试文件做测试使用,注意:以下4个工具命令并不会对文件造成物理改变,即不会改变文件内容,除非使用重定向存储输出。
test.txt
test_1txt
1、Cut:这个工具主要是“切”,剪切功能,参数 -f 提取第几列 -d 指定分隔符来分割列
切割取指定列.png
2、Sed:是一种流编辑器,一次处理一行内容,把当前处理的行存储在临时缓冲区,称为“模式空间”,处理完临时缓冲区内容后输出到屏幕,再接着重复操作处理下一行。参数 -e 指定动作编辑 a代表新增 d代表删除 s代表替换
3、Awk:文本分析工具,把文件逐行读入,类似于cut每行切片,默认以空格为分隔符。参数 -F 指定输入文件分隔符 -v 赋值一个用户定义变量
4、Sort:对文件进行排序参数 -n 依照数值大小排序 -r 倒序 -t 设置排序时的分隔字符 -k 指定需要排序的列
第一个shell的更多相关文章
- Linux Shell编程(2)——第一个shell程序
在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表.这至少让你执行它 时不必重新按顺序键入相同功能的命令序列.一个清空/var/log目录下的日志文件的脚本 # Cleanup # 必须以 ...
- Linux Shell 之 我的第一个Shell程序
这里我首先会介绍一个Shell是什么,再介绍我的第一个Shell程序和从中总结的经验. 一.Shell是什么 在说我的这个Shell程序之前,还是先跟大家说说什么是Shell吧,相信Shell这个 ...
- shell脚本中执行另一个shell脚本
分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量 注意,圆点后面有 ...
- 手把手教你做一个Shell命令窗口
这是一个类似于win下面的cmd打开后的窗口,可以跨平台使用,可以在win和linux下面同时使用,主要功能如下: 首先我们需要把这些功能的目录写出来,通过写一个死循环,让其每次回车之后都可以保持同样 ...
- 编写第一个 Shell 脚本
什么是 Shell 脚本? 一个 shell 脚本就是一个包含一系列命令的文件.shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样. 怎样编写一个 Sh ...
- Shell教程 之第一个shell脚本
1.第一个shell脚本 打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行 输入一些代码 #!/bi ...
- 第一个shell程序
前言:我为什么又来学习shell呢?因为这个轻量级的编程小脚本语言能够帮我处理一些基于linux的复杂手工工作.真是一言难尽,学会一门又来一门!! 看了2天这个教程,试着写了一个小脚本,没啥技术含量, ...
- 向大家分享一个shell脚本的坑
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...
- 编写第一个Shell脚本【TLCL】
怎样编写一个 Shell 脚本 编写一个脚本 使脚本文件可执行 把脚本放到Shell能够找到的地方 脚本文件格式 #!/bin/bash # This is our first script. ech ...
- Linux Shell系列教程之(二)第一个Shell脚本
本文是Linux Shell系列教程的第(二)篇,更多shell教程请看:Linux Shell系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个 ...
随机推荐
- Linux实战笔记__Centos7上搭建DVWA网站(基于宝塔)
安装宝塔套件 宝塔官网有远程安装代码https://www.bt.cn/bbs/thread-19376-1-1.html 下载DVWA并上传至/www/wwwroot目录 下载地址: 配置数据库连接 ...
- JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
JavaBean组件 JavaBean组件实际是一种java类.通过封装属性和方法成为具有某种功能或者处理某个业务的对象. 特点:1.实现代码的重复利用.2.容易编写和维护.3.jsp页面调用方便. ...
- echarts的使用 超好用的报表制作、数据的图形化展示
地址链接:https://echarts.apache.org/zh/index.html 1.图形选择 2.对应的js代码
- vue中将验证表单输入框的方法写在一个js文件中(表达式验证邮箱、身份证、号码、两次输入的密码是否一致)
文章目录 1.实现的效果 2.编写的js文件(这里写在了api文件下) 3.在vue页面中引入(script) 4.页面代码 1.实现的效果 20220606_154646 2.编写的js文件(这里写 ...
- flutter系列之:flutter中可以建索引的栈布局IndexedStack
目录 简介 IndexedStack简介 IndexedStack的使用 总结 简介 之前我们介绍了一个flutter的栈结构的layout组件叫做Stack,通过Stack我们可以将一些widget ...
- golang中的nil接收器
索引:https://waterflow.link/articles/1666534616841 我们先看一个简单的例子,我们自定义一个错误,用来把多个错误放在一起输出: type CustomErr ...
- python视频与帧图片的相互转化,以及查看视频分辨率
1.拆分视频为帧图片 import cv2 def video2frame(videos_path,frames_save_path,time_interval): vidcap = cv2.Vide ...
- python深拷贝、浅拷贝
.copy() 浅拷贝 如上图 定义列表A指向一个元素,列表A里面嵌套两层列表分布指向两个元素,定义列表B,列表B=A,列表C浅拷贝列表A 从图上可以看出,列表A和列表B指向的是同一个列表元素,而 ...
- JVM学习笔记——垃圾回收篇
JVM学习笔记--垃圾回收篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的垃圾回收部分 我们会分为以下几部分进行介绍: 判断垃圾回收对象 垃圾回收算法 分代垃圾回收 垃圾回收器 ...
- K8S节点选择器案例
#给节点打上标签 [root@lecode-k8s-master deployment]# kubectl label no lecode-dev-001 hostname=lecode-dev-00 ...