首先进入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的更多相关文章

  1. Linux Shell编程(2)——第一个shell程序

    在最简单的情况下,脚本程序不过是存储在一个文件里的系统命令列表.这至少让你执行它 时不必重新按顺序键入相同功能的命令序列.一个清空/var/log目录下的日志文件的脚本 # Cleanup # 必须以 ...

  2. Linux Shell 之 我的第一个Shell程序

      这里我首先会介绍一个Shell是什么,再介绍我的第一个Shell程序和从中总结的经验. 一.Shell是什么 在说我的这个Shell程序之前,还是先跟大家说说什么是Shell吧,相信Shell这个 ...

  3. shell脚本中执行另一个shell脚本

    分类: 可以在一个shell脚本中执行另一个shell脚本(或非可执行文件,主要用于取得一些变量的值),方法是: . 文件名(包括路径) 或 变量=文件名(包括路径) . $变量   注意,圆点后面有 ...

  4. 手把手教你做一个Shell命令窗口

    这是一个类似于win下面的cmd打开后的窗口,可以跨平台使用,可以在win和linux下面同时使用,主要功能如下: 首先我们需要把这些功能的目录写出来,通过写一个死循环,让其每次回车之后都可以保持同样 ...

  5. 编写第一个 Shell 脚本

    什么是 Shell 脚本? 一个 shell 脚本就是一个包含一系列命令的文件.shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样. 怎样编写一个 Sh ...

  6. Shell教程 之第一个shell脚本

    1.第一个shell脚本 打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行 输入一些代码 #!/bi ...

  7. 第一个shell程序

    前言:我为什么又来学习shell呢?因为这个轻量级的编程小脚本语言能够帮我处理一些基于linux的复杂手工工作.真是一言难尽,学会一门又来一门!! 看了2天这个教程,试着写了一个小脚本,没啥技术含量, ...

  8. 向大家分享一个shell脚本的坑

    打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...

  9. 编写第一个Shell脚本【TLCL】

    怎样编写一个 Shell 脚本 编写一个脚本 使脚本文件可执行 把脚本放到Shell能够找到的地方 脚本文件格式 #!/bin/bash # This is our first script. ech ...

  10. Linux Shell系列教程之(二)第一个Shell脚本

    本文是Linux Shell系列教程的第(二)篇,更多shell教程请看:Linux Shell系列教程 通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个 ...

随机推荐

  1. MYSQL创建分区时候报错

    第一种:ERROR 1064 (42000): Partitioning can not be used stand-alone in query near  不能单独创建分区.创建分区时要创建分区表 ...

  2. 齐博x1如何取消某个标签的缓存时间

    标签默认会有缓存, 如果你要强制取消缓存时间的话, 可以加上下面的参数 time="-1"如下图所示 标签默认缓存时间是10分钟, 你也可以改成其它时间 比如 time=" ...

  3. LINQ使用小贴士

    LINQ中的排序操作符 OrderBy:按升序对序列的元素进行排序.OrderByDescending:按降序对序列的元素排序.ThenBy:按升序对序列中的元素执行后续排序.ThenByDescen ...

  4. vue3+element-plus+登录逻辑token+环境搭建

    vue3+element-plus+登录逻辑token环境搭建 安装脚手架工具 1 npm i @vue/cli@4.5.13 -g 验证是否安装成功 1 vue -V # 输出 @vue/cli 4 ...

  5. 二十九、Helm常用命令

    # 创建一个chart范例 helm create HELM-NAME # 检查chart语法 helm lint ./HELM-NAME # 使用默认chart部署到k8s helm install ...

  6. Linux--多线程(三)

    生产者消费者模型 概念: 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过一个来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给 ...

  7. 【Azure 环境】Azure 云环境对于OpenSSL 3.x 的严重漏洞(CVE-2022-3602 和 CVE-2022-3786)的处理公告

    问题描述 引用报告:(OpenSSL3.x曝出严重漏洞 : https://www.ctocio.com/ccnews/37529.html ) 最近OpenSSL 3.x 爆出了严重安全漏洞,分别是 ...

  8. 记录redis集群连接超时问题及解决方案

    下午同事反馈,某业务场景性能测试过程中,出现异常,提供日志报: Redis command timed out 1. 先看下日志 org.springframework.dao.QueryTimeou ...

  9. Vue3 企业级优雅实战 - 组件库框架 - 2 初始化 workspace-root

    上文已经搭建了 pnpm + monorepo 的基础环境,本文对 workspace-root 进行初始化配置,包括:通用配置文件.公共依赖.ESLint. 1 通用配置文件 在项目 根目录 下添加 ...

  10. 一个基于角色的访问控制(RBAC)的简单示例

    关于"基于角色的访问控制"是什么,本文不再赘述,如果不明白,请自行查阅资料了解. 本文参考用户·角色·权限·表的设计的思想设计. 本文用到的技术有Spring Boot.Sprin ...