Shell编程学习1--基础了解
"#!path"告诉系统path所指的程序为用来解释此脚本文件的Shell程序: 如#!/bin/sh, #!/bin/bash
Shell Script的后缀名为.sh; echo命令用于向窗口打印输出文本, 类似于python里面的print.
#!/bin/bash
echo "Hello World" # 打印输出"Hello World"
Shell变量
1) 变量名称的首字符必须为字母(a-z/A-Z),里面可以带下划线; 2) 不能使用bash里面的关键词; 3) 赋值语句的=两边不能有空格.
使用一个定义了的变量, 要在变量的前面加上美元符号$.
name="Zhao" # 等号两边不能用任何空格
echo $name # Zhao
echo "I am ${name}HAHA" # I am ZhaoHAHA
Shell批处理
下面的语句可以将./test文件夹中所有的文件名循环出来, 也可以用`ls ./test/*.jpg`--这样只会将test文件夹中的.jpg图像的路径打印出来, 如: ./test/000010.jpg, 其他后缀名的文件不会打印.
#!/bin/bash
for file in `ls ./test` # 注意这里用的是后引号``
do
echo $file
done
# ouput
.jpg
.jpg
.jpg
.jpg
.jpg
将文件夹Images里面的以Pos开头的图像都复制到文件夹pos里面, 不使用for循环:
cp ./Images/Pos* ./pos/
Shell 单引号 vs 双引号 vs 后引号
#!/bin/bash
num=
str=This is a string # is: 未找到命令
str='This is a string' # 可以
echo $num #
echo '$num' # $num
echo "$num" #
Shell中的空格, 角色比较特殊, 它是一个很典型的分隔符, 单引号和双引号的区别是: 单引号将剥夺其中所有字符的特殊含义, 比如上面程序第6行的echo '$num'; 而双引号中, '$'(参数替换)和'``'(命令替换)的含义将不会被剥夺. 两者的区别就是一个剥夺, 而一个不剥夺. 显然, 无论是用单引号还是用双引号来引住This is a string, 都可以将空格这个分隔符的含义剥夺掉.
expr Expression: expr命令读入Expression参数,计算其值,然后将结果写入到标准输出, Expression可以为:
1) match string1 string2 #
2) length string1 # 输出string1的长度
3) index string1 string2 # 返回string1中包含string2中任意字符的第一个位置索引
4) substr string1 StartPosition Length # 返回一个以StartPosition的字符开始在string1中的字符串,而且是长度为Length的字符串
此命令的一些返回值有特殊含义: --Expression参数运算值既不为空也不为0; --Expression参数计算值或为空或为0; --Expression参数无效; >2--发生了错误.
这个命令一般用于整数值计算, 但也可以用于字符串操作;
作用1: 数学运算器(格式: expr argment operator argment, 注意, 运算符的两边一定要有空格分隔符)
$ expr + # +两边没有加空格
+
$ expr + # +两边必须有空格 $ expr *
expr: 语法错误 # 使用乘号的时候,注意用\转义. 不然会报错
$ expr \* $expr /
作用2: 增量计数: expr可以在循环中用于增量计算, Shell里面的普通运算竟然也需要expr的协助.
root@:/# LOOP=
root@:/# echo $LOOP root@:/# LOOP=`expr $LOOP + `
root@:/# echo $LOOP
总结: Shell里面的运算还挺抽象麻烦的, 必须借助于expr吗?
$ a=
$ echo $a $ a=$a+
$ echo $a
+ # 这是啥
$ a=`expr $a + ` # 每个空格都要慎重
$ echo $a
readonly: 声明只读变量,相当于C++里面的const变量,其值不可修改
$ a=
$ readonly a # 方式1
$ a=
bash: a: readonly variable
$ readonly b= # 方式2
$ b=
bash: b: readonly variable
$ readonly c # 这种形式就不行了
$ c=
bash: c: readonly variable
unset: 删除变量(相当于MATLAB里面的clear,对变量进行删除, 在MATLAB中, 有时某个变量占用空间较大时, 不用的时候我就在程序中将其删除)
$ a=
$ echo $a $ unset a
$ echo $a # 无任何输出
参考文献:
[1] Shell教程: http://www.runoob.com/linux/linux-shell.html
[2] Linux中expr命令: http://blog.csdn.net/guhong5153/article/details/6542995
Shell编程学习1--基础了解的更多相关文章
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹
原文 (C#)Windows Shell 编程系列1 - 基础,浏览一个文件夹 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) Windows Shell 编程,即 Windows ...
- shell编程学习之使用jq对json数据进行提取
shell编程学习之使用jq对json提取 jq命令允许直接在命令行下对JSON进行操作,包括分片.过滤.转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上.预编译的二进制文件可以 ...
- Shell高级编程学习笔记(基础篇)
目录 1.shell脚本的执行方法 2.shell的变量类型 3.shell特殊变量 4.变量子串的常用操作 5.批量修改文件名实践 6.变量替换 7.在shell中计算字符串长度的方法 ...
- Shell编程学习之Shell编程基础(一)
这篇随笔将要介绍关于Shell编程的基本知识,这些将会在假设你已经熟悉了Linux系统和命令行的基本知识. 构建基本脚本 你应该了解或熟悉使用Shell命令行了,但是只是使用Shell命令行的命令,有 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- shell编程学习笔记(一):编写我的第一段代码
目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...
- shell编程学习笔记之sed编辑器
在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- shell编程学习笔记【原创】
本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...
随机推荐
- C++模板编程中只特化模板类的一个成员函数
模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多数成员函数的功能可能是一模一样的,特化时我们可能只需要重新实现1.2个成员函数即可.在这种情况下,如果全 ...
- Alpha 冲刺 —— 十分之十
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...
- TensorFlow入门之MNIST样例代码分析
这几天想系统的学习一下TensorFlow,为之后的工作打下一些基础.看了下<TensorFlow:实战Google深度学习框架>这本书,目前个人觉得这本书还是对初学者挺友好的,作者站在初 ...
- Java类编译、加载、和执行机制
Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...
- 初识Unity Mesh
Mesh概念:Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而多边形实际上是由多个三角形拼接而成的.所以一个3D模型的表面其实是由多个彼 ...
- Redis+Sentinel 实现redis集群高可用
1.sentinel作用及实现原理: https://my.oschina.net/u/172871/blog/596976?p={{currentPage-1}}
- git 使用 gitignore
git 使用 git简介 git 命令 git 忽略文件 git 作用:版本控制 Git 是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Li ...
- Tomcat假死排查方案
使用Tomcat作为Web服务器的时候偶尔会遇到Tomcat停止响应的情况,通过netstat查看端口情况会发现tomcat的端口出现大量的CLOSE_WAIT,此时Tomcat会停止响应前端请求,同 ...
- Android 使用GPS获取到经纬度后 无法在Android8.0上使用Geocoder类获取位置信息
由于我的应用在获取到经纬度后在Android8.0不能使用如下代码获取位置信息.只好使用百度地图 WEB服务API 通过调接口的方式获取位置信息. Geocoder geocoder = new Ge ...
- 服务器能ping通ip,通不了域名解决方案
# 将网卡配置文件配置固定ip后,添加DNS解析,然后重启网卡即可: [root@a ~]# tail -2 /etc/sysconfig/network-scripts/ifcfg-ens160 D ...