十、Shell脚本编程
Shell概念
1、Shell壳
Shell是一个用C余元编写的程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
2、Shell脚本
是一种为shell编写的脚本程序,业界所说的shell通常是指shell脚本。
shell和shell script是两个不同的概念
Shell环境
Shell编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释运行脚本的解释器就可以
Linux的Shell种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)(常用)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(sbin/sh)
Shell程序步骤
1.创建一个文件,扩展名为.sh
2.修改文件的权限为可执行文件
3.执行
Shell结构
1.#! 用来指定执行的脚本的shell
2.# 注释
3.命令和控制结构
Shell变量
一、命名规则
1.命名只能使用字母、数字、下划线,不能以数字开头
2.中间不能有空格
3.不能使用标点符号
4.不能使用bash的关键字
二、使用规则
1.习惯用大写字母来命名变量
2.赋值时,"="前后不能有空格
3.命令的执行结果赋值给变量时,使用反单引号如TIME=`date`
4.使用变量时(引用变量时)使用 $变量名 或 ${变量名}
5.只读变量
使用readonly。此命令可以将变量定义为只读变量,只读变量的值不能被改变
6.删除变量
使用unset。变量删除后不能再次被使用,unset不能删除只读命令
三、变量的类型
1.临时变量:也叫局部变量,在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
2.永久变量:也叫环境变量,所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
Shell字符串
一、字符串
1.是shell编程中最常用和最有用的数据类型
2.字符串可以用单引号,也可以使用双引号,还可以不需要引号
3.单引号:
a.单引号里的任何字符串都会原样输出,单引号字符串中的变量是无效的
b.单引号字符串中不能出现单引号(使用转义符号也不行)
4.双引号:
a.双引号内可以有变量
b.双引号内可以出现转义字符
二、字符串拼接
1.无缝拼接
2.双引号内直接使用变量
三、获取字符串长度
1.${#name}
2.expr length ${name}
四、提取子字符串
1.${name:startIndex:length}
2.${name:startIndex}
3.${name:0-index:length}
4.${name:0-index}
*:还可以使用#、##、%、%%进行删除后保留的子串
#、##:从左边开始删除
#表示从左边删除到第一字指定的字符
##表示从左边删除到最后一个指定的字符
%、%%:从右边开始删除
%表示从右边删除到第一个指定的字符
%%表示从右边删除到最后一个指定的字符
*:删除包括指定的自身
五、子字符串查找
url="this is a good man"
index=`exper index "${url}" is`
echo $index -----2
Shell数组
一、使用规则
1.Bash仅仅支持一维数组,并且没有限定数组的大小。
2.数组元素的下标从0开始。
3.获取数组中的元素要利用下标,
4.下标使用不当,会报错。
二、定义数组
1. arrayName=(值1 值2 … 值n)
2. arrayName=( 值1
值2
..
值n)
注意:元素间使用空格分隔开或者换行符
3. 或者直接定义数组的各个元素
name[0]=值1
name[1]=值2
…
name[n]=值n
三、读取数组
格式:${name[index]}
四、获取数组所有元素
格式:${name[*]} 或${name[@]}
五、获取数组长度
格式: ${#name[*]}或${#name[@]}
位置变量和特殊变量
Shell解释用户执行的命令时,会将命令行的一串字符进行解析划分成部分。每个部分都有一个固定的变量名$n,不能自定义。
$n: n从0开始,依次往后+1。从$1开始 叫位置参数变量。大于等于10时,必须使用{}将数字括起来
Ex:ls –la file1 file2 file3 ….. file10
$0 的值为:ls -la
$1 的值为file1
…….
${10} 的值为file10
变量名称 | 意义 |
$* | 获取所有的参数,合并成一个字符串 |
$# | 获取参数的个数 |
$$ | 获取当前进程的ID |
$! | 获取后台运行的最后一个进程的ID |
$? | 显示最后一个命令的退出状态,0表示没有错误 |
Shell命令
一、read命令(从键盘读取数据,赋值给变量)
Ex: read username
*:当输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。
Ex: read –p “请输入密码:” –n 6 -t 5 password
echo -e “\npassword is $password”
参数说明:
-p:输出提示文字
-n 输入字符串长度,达到此长度,自动结束
-t 输入限制时间
-s 隐藏输入内容
二、expr命令(对整数型变量进行算术运算)
Ex: expr 3 + 5
expr 3 \* 5
复杂计算:expr ` expr 5 - 1` / 2
num=` expr $var / 2`
三、echo命令(用于字符串的输出显示)
echo $var
echo It is a test file
开启转义 : -e
echo -e “ hello \n world”
echo -e “hellokitty \c”
\n #换行
\c #不换行
四、printf命令
与echo功能相同,用来输出,功能更强大,如格式化字符串,指定字符串的宽度,左右对齐方式,默认不换行,可以手动添加\n
语法:printf format-string [arguments……...]
说明:
format-string: 格式控制字符串
arguments: 参数值列表
%d %s %c %f 格式替代符详解:
d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!
s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!
c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!
f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!
Ex:
printf “HelloWorld” #不会换行
printf “HelloWorld\n” #才会换行
printf “%-20s %-16s %-8s\n” 姓名 性别 体重kg
printf “%-20s %-16s %-8.2s\n” 张三 男 45.1234kg
printf “%-20s %-16s %-8.2s\n” 李四 男 76.5678kg
printf “%-20s %-16s %-8.2s\n” 王五 女 40.6543kg
Ex:
printf “%d %s\n” 1 “abc”
printf %s abcdef
printf %s abc def #此格式只指定了一个参数,但是多出的参数仍然会按照该格式输出,格式被重用
printf “%s %s %s\n” a b c d e f g h I j
printf “%s and %d” #没有参数时,%s为空,%d为0
转义序列 | 意义 |
\b | 退格 |
\f | 换页显示 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 转义斜杠 |
五、test命令(用于测试变量是否相等、是否为空、文件类型等)
格式:test 测试条件
测试范围:整数测试,字符串测试,文件测试
整数测试
test v1 -eq v2 测试两个数是否相等
test v1 -gt v2 测试是否 v1>v2
test v1 -ge v2 测试是否 v1>=v2
test v1 -lt v2 测试是否 v1<v2
test v1 -le v2 测试是否 v1<=v2
test v1 -ne v2 测试两个数是否不相等
字符串测试
test str1=str2 测试字符串是否相等
test str1!= str2 测试字符串是否不相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
文件测试
test -d file 指定文件是否目录
test -f file 指定文件是否是常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件的大小是否非0
*:通常test命令不单独使用,而是与if语句连用
十、Shell脚本编程相关推荐
- Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结
时间:2017年12月04日星期一 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...
- linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...
<Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...
- shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf
shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...
- Shell脚本编程与文件系统修复
导读 Linux基金会发起了LFCS认证(Linux 基金会认证系统管理员)Linux Foundation Certified Sysadmin,这是一个全新的认证体系,旨在让世界各地的人能够参与到 ...
- 《Linux命令行与shell脚本编程大全》(第三版)读书笔记
第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...
- shell脚本编程学习笔记2(xdl)——Bash变量
shell脚本编程学习笔记2--Bash变量 1,变量简介 1,计算机内存单元2,设置规则字母数组下划线组成,不能以数字开头Bash中,默认类型字符串型,变量类型可修改 2,Bash变量规则 1,变量 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter16-脚本控制
十六.脚本控制 Linux 利用信号与系统中的进程进行通信. 重温 Linux 信号 Linux 系统和应用程序可以产生超过 30 个信号.在 shell 脚本编程时会遇到的最常见的 Linux 系统 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter1-Chapter16 )
一.初识 Linux shell Linux 系统可划分为以下 4 部分. Linux 内核 GNU 工具 图形化桌面环境 应用软件 内核主要负责以下 4 种功能. 系统内存管理 内核通过硬盘上称为交 ...
- 《Linux命令行与shell脚本编程大全》笔记一
第一章 初始 Linux shell Linux内核主要四种功能: 1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理 shell:交互工具. 第三章 基本的bash shell ...
- SHELL 脚本编程基础
目录 前言 一. shell 概述 1.1 shell 和 shell 脚本 1.1.1 什么是shell 1.1.2 shell的作用 1.1.3 shell脚本是什么 1.1.4 shell脚本能 ...
最新文章
- JVM_03 运行时数据区[ 堆 ]
- 计算机二级公共基础部分学习笔记
- Map/Reduce
- system合约源码分析
- spring mvc+mybatis ios android整合cms内容发布平台
- Church's Coupon Performance Test Script
- 基于51单片机的可掉电走表万年历设计(LCD12864+DS1302+DS18B20+LM7805+18650电池外部供电)
- 网络工程师--网络规划和设计案例分析(1)
- Linux桌面词典 GoldenDict词典
- 数据库简单查询——查询的条件
- svg, ttf, woff, woff2图标的转换
- 9.无 线 网 络 和 移 动 网 络
- HTML的游戏分数怎么设置,HTML5《拯救分号》游戏
- python编程大赛队名_同行——团队展示
- 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者
- 学习Mac开发第四弹 通过NSImageView加载图片
- 远程桌面连接管理 工具使用说明
- FPGA系统性学习笔记连载_Day19【综合实验】之【数字钟】【Intel Cycle IV FPGA平台验证】
- Codeforces Round #617 (Div. 3)
- 和Android的第一次美丽邂逅
热门文章
- 用Mediator Pattern + Queue 解决 订单处理流程
- sql 判断分钟是偶数数据_SQL注入数据库类型判断
- python groupby用法_Python数据分析黑色星期五-知识点整理
- 概率论学习之瓢虫冬眠
- Linux复习-常见命令及文件操作
- slice indices must be integers or None or have an __index__ method
- python 根据父子信息 还原成json树
- NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver
- sklearn库各个算法学习笔记
- Windows下Python安装numpy+mkl,Scipy和statsmodels