首先进入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. JavaScript基础&实战(2)js中的强制类型转换、运算符、关系运算符、逻辑运算符、条件运算符

    文章目录 1.强制类型转换Number 1.1 代码 1.2 测试结果 2.进制表示 2.1 代码 2.2 测试结果 3.强制类型转换为Boolea 3.1 代码 3.2 测试结果 4.运算符 4.1 ...

  2. 获取cpu的核数

    //获取cpu的核数 System.out.println(Runtime.getRuntime().availableProcessors());

  3. python爬虫下载小说

    1. from urllib.request import urlopen from urllib import request from bs4 import BeautifulSoup from ...

  4. 14.-F对象和Q对象

    一.F对象 一个F对象代表数据库中某条记录的字段的信息 作用 通常是对数据库中的字段值在不获取的情况下进行操作 用于属性(字段)之间的比较   语法: from django.db.models im ...

  5. Java反序列化中jndi注入的高版本jdk绕过

    群里大佬们打哈哈的内容,菜鸡拿出来整理学习一下,炒点冷饭. 主要包含以下三个部分: jndi注入原理 jndi注入与反序列化 jndi注入与jdk版本 jndi注入原理: JNDI(Java Name ...

  6. 长事务 (Long Transactions)

    长事务 长事务用于支持 AutoCAD 参照编辑功能,对于 ObjectARX 应用程序非常有用.这些类和函数为应用程序提供了一种方案,用于签出实体以进行编辑并将其签回其原始位置.此操作会将原始对象替 ...

  7. 绵阳2020CCPC补题

    绵阳2020CCPC D,K,J,L,G D. Defuse the Bombs 知识点:二分答案 复杂度:\(O(nlogn+log^2n)\) vp时我猜了一个结论,验了几个样例就写了,喜提WA3 ...

  8. Training: WWW-Robots

    原题链接:http://www.wechall.net/challenge/training/www/robots/index.php 打开网页他给我们说什么 说什么这是一个小挑战,你将会了解到机器人 ...

  9. NOI2011真题:兔兔与蛋蛋游戏

    NOI2011真题:兔兔与蛋蛋游戏 题目描述 这些天,兔兔和蛋蛋喜欢上了一种新的棋类游戏. 这个游戏是在一个 n行 m 列的棋盘上进行的.游戏开始之前,棋盘上有一个格子是空的,其它的格子中都放置了一枚 ...

  10. 教你用JavaScript实现随机点名

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript相关知识,做一个随机点名的案例.你可以通过点击开始按钮控制上方名字的闪动,点击停止按钮可以随机选定一个名 ...