[Linux] 10. shell编程基础《updating》
第一个shell脚本
- shell 脚本通常是以#!起始的文本文件
Linux环境下的任何脚本文件都是以一个被称为 shebang 的特殊行作为起始的。
在这行中,字符 #! 被置于解释器路径之前。/bin/bash是Bash的绝对路径。
#!/bin/bash
- #!(shebang): # sharp,!bang
- 除了第一行#,其余#都是注释
- 命令有2种执行方式:
- 命令行
- 写在文件中作为脚本
- 脚本有2种执行方式:
- 将脚本作为sh命令的参数(bash解释文件)
- 将脚本文件作为具有执行权限的可执行文件(文件加上可执行权限)
shell程序读取脚本的首行,查看shebang行是否为#!/bin/bash/。它会自动识别/bin/bash.并在内部以如下命令执行该脚本文件。
变量
变量类型无需显示声明(在解释过程中自动判断)
- 统一按照字符串处理(sort时会发现10排在2前面)
- 根据对变量的操作变化类型
$取变量的值
$[]数值计算赋值(a=10)不能空格(a = 10),否则会被认为是命令
清空变量(unset a)
变量区分大小写,系统变量一般大写
特殊变量
位置变量
- $0
- $n
- $*
- $@
- $#
状态变量
数组
索引数组(索引赋值,批量赋值)
关联数组
数组操作
- a+=(0 1 2 3 4 5 67 8) 数组追加会清空,并重新赋值
- a=(0 1 2 3 4 5 6 7 8) a=(8 7 6 5 4 3 2 1 0) 数组覆盖
- 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
和echo区别:没有默认的换行符,需要手动添加“\n”
函数
#!/bin/bashfunction test() {echo [$1]
}test "kkb"
echo "[$1]"
- #function 函数名() {函数体}
- {}中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 $(( (ab)%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
- 正则表达式针对文本
在这里插入代码片
匹配单个字符 i .
匹配一组字符
[]
元字符
需要加上 -P 才会支持元字符
POSIX字符类
*不需要转义
其他的好像都要转义
加了-E就不用\转义了
-w表示独立的单词
匹配邮箱???
sed 专题
Linux三剑客 grep sed …
vim交互式的文本编辑器
sed非交互式 文本编辑器
、
语法规则
sed+选项+命令+ 文件
1a 对第一行进行追加
$a对最后一行追加
追加和插入的区别
追加在后面
插入在当前
awk专题
- 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》相关推荐
- Linux之shell编程基础
一.变量 变量在shell中分为:本地变量.环境变量.位置参数: 本地变量:仅可在用户当前shell生命期的脚本中使用的变量,本地变量随着shell进程的消亡而无效,本地变量在新启动的shell中依旧 ...
- Linux Shell编程基础
linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名.虽然可以为命令建立"链接"解决长文件名的问题,但 ...
- 「Linux」Linux Shell 编程基础入门
Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...
- 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
shell编程基础 shell简介 属性 shell是一个命令行解释器,建立了用户和操作系统之间的接口.当我们在命令行输入一个命令后,shell会对命令进行解释,调用相应的程序去执行.shell是一种 ...
- linux 系统 Shell语言 基础
linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...
- 运维 - 第一阶段 - linux与shell编程
linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...
- shell编程基础笔记
第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...
- Shell编程基础常用代码1
Shell编程 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Sp ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
最新文章
- python3.6.1安装教程-ipython安装(python3.6.1)(转载)
- IO多路复用的三种机制Select,Poll,Epoll
- [转载] 的士速递2
- mysql slave 1032_修复mysql slave复制1032错误
- Vlc支持IE 360 低版本的Google浏览器
- 技术动态 | TechKG:一个面向中文学术领域的大型知识图谱
- Mac 技巧 | CAD 汉化后无法新建模板怎么办?
- 互联网+正在颠覆行车记录仪市场
- 【转】flash air中读取本地文件的三种方法
- VMware使用技巧之“快照”+“克隆”
- 多线程,io,网编,反射,xml
- 3.2 Hadoop简介
- 国产三维CAD华天软件STNOVATION 几何造型内核CRUX IV 解析
- Git 分支开发规范
- 漫画丨什么是边缘云?
- Allegro PCB -通孔焊盘制作 及Flash制作
- BootStrap表格详解
- LPOJ - 5498 「NOIP2010」机器翻译
- python读取xml文件信息失败_通过XML读取XML文件时出错。
- 事件循环机制 (Event Loop)
热门文章
- 爬取贴吧上的图片到本地
- error:type/value mismatch at ... ::iterator
- Vue.js 写一个echarts的水滴图
- 轻松搞定个人虚拟桌面部署之2-安装远程桌面服务
- ARM指令浅析1(mov、ldr)
- 图格 Pro for mac(图片拼图切图大师)
- org.hibernate.PersistentObjectException: detached entity passed to persist: cn.edu.xupt.bean.Users
- 什么样的企业可以称之为初创企业?
- 网课查题极速响应系统-公众号查题
- 怎么将知网论文caj导出word文件