第一个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建立起一个大体的印象了,接下来,我们通过一个 ...
随机推荐
- 作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
作用域通信对象:session session对象基于会话,不同用户拥有不同的会话.同一个用户共享session对象的所有属性.作用域开始客户连接到应用程序的某个页面,结束与服务器断开连接.sessi ...
- web3.0、比特币、区块链、元宇宙,以及那些待收割的韭菜们!
前几天看到周星驰在社交账号上招聘web3.0的人才,感觉有必要说说web3.0,当然不是基于技术层面,而是从另一个维度说说web3.0以及其它相关的概念,从而做到如何反欺诈,如何避免被资本割韭菜.想到 ...
- 2.httprunner-yaml用例结构
前言: httprunner3.x版本弱化了api层的概念 直接在testcase中写request请求 如果是单个请求,也可以直接写成一个testcase 每个testcase必须具有两个类属性:c ...
- 十八、Service的应用
Service 的应用 ClusterIP clusterIP 主要在每个 node 节点使用 ipvs,将发向 clusterIP 对应端口的数据,转发到 kube-proxy 中.然后 kube ...
- Mybatis笔记02-----MyBatis的核心配置文件以及模糊查询的实现
认识MyBatis核心配置文件mybatis-config.xml 这个文件名是随意可以起,但为了规范一般都命名为mybatis-config.xml:配置文件与MyBatis的行为和属性信息息息相关 ...
- 记录redis集群连接超时问题及解决方案
下午同事反馈,某业务场景性能测试过程中,出现异常,提供日志报: Redis command timed out 1. 先看下日志 org.springframework.dao.QueryTimeou ...
- springcloud组件梳理之Feign
最近刚好打算做一个springcloud系列的分享,趁此机会刚好梳理下springcloud常用组件的使用,今天先对feign做个简单介绍! feign是一个声明式的Web服务客户端,它使得发送web ...
- TCN代码详解-Torch (误导纠正)
TCN代码详解-Torch (误导纠正) 1. 绪论 TCN网络由Shaojie Bai, J. Zico Kolter, Vladlen Koltun 三人于2018提出.对于序列预测而言,通常考虑 ...
- 【Java并发007】原理层面:ReentrantLock中lock()、unlock()全解析
一.前言 Java线程同步两种方式,synchronized关键字和Lock锁机制,其中,AQS队列就是Lock锁实现公平加锁的底层支持. 二.AQS源码对于lock.lock()的实现 2.1 AQ ...
- Easy-Classification-验证码识别
1.背景 Easy-Classification是一个应用于分类任务的深度学习框架,它集成了众多成熟的分类神经网络模型,可帮助使用者简单快速的构建分类训练任务. 案例源代码 Easy-Classi ...