第一个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建立起一个大体的印象了,接下来,我们通过一个 ...
随机推荐
- 5.@pytest.mark.parametrize()数据驱动
简介: pytest.mark.parametrize 是 pytest 的内置装饰器,它允许你在 function 或者 class 上定义多组参数和 fixture 来实现数据驱动. @pytes ...
- Linxu常用命令
一.Linux权限的概念 Linux下有两种用户:普通用户和超级用户: 普通用户:在linux下做有限的事情: 超级用户:可以在linux系统下做任何事情,不受限制. 普通用户的提示符是"$ ...
- 一、Vue.js介绍
一.介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手 ...
- onps栈移植说明(2)——编译器及os适配层移植
2. 字节对齐及基础数据类型定义 协议栈源码(码云/github)port/include/port/datatype.h中根据目标系统架构(16位 or 32位)及所使用的编译器定义基础数据类型及字 ...
- clang在编译时指定目标文件所需的最低macOS版本
调研这个的原因,是因为有个同事在macOS 12.2上打包好的程序,放在macOS 10.15上运行时报错: Dyld Error Message: Symbol not found: __ZNKS ...
- 2022icpc新疆省赛
菜鸡第一次打icpc 记录一下历程 习惯#define int long long 以下皆是按照我认为的难易顺序排序 K. 看题意大概就是说求从L加到R 1 ios::sync_with_stdio( ...
- <四>构造函数初始化列表
示例代码1 点击查看代码 class CDate{ public: CDate(int _year,int _month, int _day){ this->year=_year; this-& ...
- jvm调优思路及调优案例
jvm调优思路及调优案例 我们说jvm调优,其实就是不断测试调整jvm的运行参数,尽可能让对象都在新生代(Eden)里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时 ...
- vscode代码部署
前言 在本地环境中开发代码时,经常需要将代码上传到服务器环境中,在环境中构建并调试程序.如果手动使用scp.ftp等文件传输程序将代码上传至环境,一次两次还好,反复多次操作则有些繁琐. 为了方便进行本 ...
- 2022-11-10 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...