第一个shell脚本

  1. shell 脚本通常是以#!起始的文本文件
    Linux环境下的任何脚本文件都是以一个被称为 shebang 的特殊行作为起始的。
    在这行中,字符 #! 被置于解释器路径之前。/bin/bash是Bash的绝对路径。
#!/bin/bash
  1. #!(shebang): # sharp,!bang
  2. 除了第一行#,其余#都是注释
  3. 命令有2种执行方式:
    1. 命令行
    2. 写在文件中作为脚本
  4. 脚本有2种执行方式:
    1. 将脚本作为sh命令的参数(bash解释文件)
    2. 将脚本文件作为具有执行权限的可执行文件(文件加上可执行权限)
      shell程序读取脚本的首行,查看shebang行是否为#!/bin/bash/。它会自动识别/bin/bash.并在内部以如下命令执行该脚本文件。

变量

  1. 变量类型无需显示声明(在解释过程中自动判断)

    1. 统一按照字符串处理(sort时会发现10排在2前面)
    2. 根据对变量的操作变化类型
  2. $取变量的值
    $[]数值计算

  3. 赋值(a=10)不能空格(a = 10),否则会被认为是命令
    清空变量(unset a)

  4. 变量区分大小写,系统变量一般大写

特殊变量

位置变量

  1. $0
  2. $n
  3. $*
  4. $@
  5. $#

状态变量

数组

  1. 索引数组(索引赋值,批量赋值)

  2. 关联数组

数组操作

  1. a+=(0 1 2 3 4 5 67 8) 数组追加会清空,并重新赋值
  2. a=(0 1 2 3 4 5 6 7 8) a=(8 7 6 5 4 3 2 1 0) 数组覆盖
  3. unset arr[102]和arr[102]=""区别
    unset后下标102不再使用,第二种下标仍在使用

输入输出与流程控制

输入 read

#!/bin/bashread -d efo n    #读入e结束,而不是读入"\n"结束
echo ${n}read -a arr      #数组
echo ${arr[@]}   #数组元素
echo ${!arr[@]}  #数组下标read -n 5 k      #5个字符
echo ${k}read -t 5 -s -p "Please input a passwd : (8)" -n 8 pswd #-p提示,-s隐藏,-t 5等待5s超时
echo #换行,打印清晰
echo $pswd

输出

echo


print


和echo区别:没有默认的换行符,需要手动添加“\n”

函数

#!/bin/bashfunction test() {echo [$1]
}test "kkb"
echo "[$1]"
  1. #function 函数名() {函数体}
  2. {}中local的使用:局部变量与全局变量

shell脚本编程基础之for循环

举例更直观 local就是用于定义只允许于指定区块(由{}决定)的变量:
y:root:/tmp> cat yyy
#!/bin/bash

a=“abc”

func() {
local a=“def”
echo “local: $a”
}

echo “global: $a”
func

y:root:/tmp> ./yyy
global: abc
local: def


1、数字类型转字符类型

数字类型转字符类型,是比较常见的,也是必须容易实现的。大多时候系统能够自动进行转换,如:

aa=$((1+1));echo $aa

变量aa赋值为整数2,但echo 输出时已被当成字符型。当然也可以强制进行转换,如:

echo $aa""

通过与空字符串进行连接,强化将变量aa转化成了字符型。


2、上面的方法也同样适用于各种浮点数类型转字符类型。如:

aa=$(awk ‘BEGIN{print 7.01*5-4.01 }’);

echo $aa;

echo $aa"";

变量aa是算式(7.01*5-4.01 )的值,是个浮点数,可看到成功转化成字符。

=----------

3、字符类型转数值类型

反过来,字符类型转数值类型也是可以实现的。

如:

aa=12;

aa=((((((a+4));

echo $aa;

在shell中,给变更赋值中的数字默认是被当作字符串的。

循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去for 变量 in 列表;do循环体
done

$name 和 $url 之间之所以不能出现空格,是因为当字符串不被任何一种引号包围时,遇到空格就认为字符串结束了,空格后边的内容会作为其他变量或者命令解析

加{ }是为了帮助解释器识别变量的边界

${} 变量替换 就是把变量的真实值带入。

[]和[]和[]和(()) 是一组 标识的是 算术运算 ±*/

[ ] 是test 的另一种格式 注意左右需要空格。

[[ ]] 是加强的[] 可以有匹配 没有字符的分割。

(()) 是一种可以支持数学运算符的 条件判断 可当作 [] 用 只要其中的表达式符合c就可以。他和(())的区别是 [[]] 可以支持 ±*/ 而[[ ]] 支持 匹配
————————————————
版权声明:本文为CSDN博主「往事如风 随风即行」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sdc20102010/article/details/83277167


${ } :

用于变量替换。一般情况下,{ }用于变量替换。一般情况下,用于变量替换。一般情况下,var 与${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围。比如

$ A=B
$ echo $AB
原本是打算先将 $A 的结果替换出来,然后再补一个 B 字母于其后,
但在命令行上,真正的结果却是只会提换变量名称为 AB 的值出来…
若使用 ${ } 就没问题了:
$ echo ${A}B
BB

$[] $(()) :

它们是一样的,都是进行数学运算的。支持+ - * / %:分别为 “加、减、乘、除、取模”。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。

例:
$ a=5; b=7; c=2
$ echo $(( a+bc ))
19
$ echo $(( (a+b)/c ))
6
$ echo $(( (a
b)%c))
1

在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用,如:
$(( $a + $b * c))也可得到19的结果此外,c)) 也可得到 19 的结果 此外,c))也可得到19的结果此外,(( )) 还可作不同进位(如二进制、八进位、十六进制)作运算呢,只是,输出结果皆为十进制而已:
echo $((16#2a)) 结果为 42 (16进位转十进制)


shell的等号在赋值的时候两边不能有空格,在比较的时候两边必须有空格

大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)
不相等 -ne (not equal)


  • 元字符:
    正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

单引号’'和双引号""

两者都是解决变量中间有空格的问题。

在bash中“空格”是一种很特殊的字符,比如在bash中这样定义str=this is String,这样就会报错,为了避免出错就得使用单引号’'和双引号""。

单引号’’,双引号"“的区别是单引号’‘剥夺了所有字符的特殊含义,单引号’'内就变成了单纯的字符。双引号”“则对于双引号”"内的参数替换($)和命令替换(``)是个例外。

比如说   n=3

echo ‘$n’

结果就是n3

改成双引号  echo “$n”,结果就是3

反引号``

反引号是命令替换,命令替换是指Shell可以先执行中的命令,将输出结果暂时保存,在适当的地方输出。语法:command


  1. 正则表达式针对文本
在这里插入代码片

匹配单个字符 i .

匹配一组字符
[]

元字符




需要加上 -P 才会支持元字符

POSIX字符类


*不需要转义
其他的好像都要转义


加了-E就不用\转义了

-w表示独立的单词

匹配邮箱???

sed 专题

Linux三剑客 grep sed …
vim交互式的文本编辑器
sed非交互式 文本编辑器

语法规则
sed+选项+命令+ 文件

1a 对第一行进行追加
$a对最后一行追加

追加和插入的区别
追加在后面
插入在当前

awk专题

  1. AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

lastb | grep -v “wtmp” | grep -v “^$” | cut -d " " -f 1 | sort | uniq -c | sort -rn | awk ‘BEGIN {printf(“hello\n”)} {printf("%-10s %-10s\n", $2, $1)} END {printf(“byebye\n”)}’

awk是编程语言环境,能实现c语言语言和变量赋值

cat /etc/passwd | awk -F: -v sum=0 ‘BEGIN {printf(“awk BEGIN\n”)} {if($3<1000){sum+=$3;printf("%s %s\n", $1, $3)}} END{printf(“awk END\nsum=%d\n”, sum)}’

命令行:
sum=0
cat /etc/passwd | awk -F: -v sum=$sum ‘BEGIN {printf(“awk BEGIN\n”)} {if($3<1000){sum+=$3;printf("%s %s\n", $1, $3)}} END{printf(“awk END\nsum=%d\n”, sum)}’
从外部赋值
echo $sum 输出0, awk中变量未返回给原变量

[Linux] 10. shell编程基础《updating》相关推荐

  1. Linux之shell编程基础

    一.变量 变量在shell中分为:本地变量.环境变量.位置参数: 本地变量:仅可在用户当前shell生命期的脚本中使用的变量,本地变量随着shell进程的消亡而无效,本地变量在新启动的shell中依旧 ...

  2. Linux Shell编程基础

    linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...

  3. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  4. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础

    shell编程基础 shell简介 属性 shell是一个命令行解释器,建立了用户和操作系统之间的接口.当我们在命令行输入一个命令后,shell会对命令进行解释,调用相应的程序去执行.shell是一种 ...

  5. linux 系统 Shell语言 基础

    linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 ​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...

  6. 运维 - 第一阶段 - linux与shell编程

    linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...

  7. shell编程基础笔记

    第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...

  8. Shell编程基础常用代码1

    Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...

  9. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

最新文章

  1. python3.6.1安装教程-ipython安装(python3.6.1)(转载)
  2. IO多路复用的三种机制Select,Poll,Epoll
  3. [转载] 的士速递2
  4. mysql slave 1032_修复mysql slave复制1032错误
  5. Vlc支持IE 360 低版本的Google浏览器
  6. 技术动态 | TechKG:一个面向中文学术领域的大型知识图谱
  7. Mac 技巧 | CAD 汉化后无法新建模板怎么办?
  8. 互联网+正在颠覆行车记录仪市场
  9. 【转】flash air中读取本地文件的三种方法
  10. VMware使用技巧之“快照”+“克隆”
  11. 多线程,io,网编,反射,xml
  12. 3.2 Hadoop简介
  13. 国产三维CAD华天软件STNOVATION 几何造型内核CRUX IV 解析
  14. Git 分支开发规范
  15. 漫画丨什么是边缘云?
  16. Allegro PCB -通孔焊盘制作 及Flash制作
  17. BootStrap表格详解
  18. LPOJ - 5498 「NOIP2010」机器翻译
  19. python读取xml文件信息失败_通过XML读取XML文件时出错。
  20. 事件循环机制 (Event Loop)

热门文章

  1. 爬取贴吧上的图片到本地
  2. error:type/value mismatch at ... ::iterator
  3. Vue.js 写一个echarts的水滴图
  4. 轻松搞定个人虚拟桌面部署之2-安装远程桌面服务
  5. ARM指令浅析1(mov、ldr)
  6. 图格 Pro for mac(图片拼图切图大师)
  7. org.hibernate.PersistentObjectException: detached entity passed to persist: cn.edu.xupt.bean.Users
  8. 什么样的企业可以称之为初创企业?
  9. 网课查题极速响应系统-公众号查题
  10. 怎么将知网论文caj导出word文件