Linux学习:sheel编程
Shell编程
1、Shell概述
Shell是一个命令行解释器,他为用户提供了一个向Linux内核发送请求一边运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell解释执行的脚本语言,在Shell中可以调用Linux系统命令。
2、shell 的脚本的执行方式
2.1 echo输出内容到控制台
echo -e [输出内容] -e 支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符。和“-n”选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数 |
2.2 脚本格式
文件脚本以**#!/bin/bash**开头,开启helloworld的世界。
#!/bin/bashecho "Hello World"
2.3 脚本的执行方式
- 输出脚本的相对路径/绝对路径
- bash/sh +脚本
3 shell中的变量
3.1 概述
- Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量。
- 系统变量:$HOME、$PWD、$SHELL、$USER等等
- 显示当前shell中所有变量:set
3.2 定义变量
3.2.1 基本语法
- 定义变量: 变量=值
- 撤销变量: unset 变量
- 声明静态变量:readonly 变量
- 全局变量:export 变量
3.2.2 变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格
- 变量名称一般习惯为大写
- 双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意
3.3 命令的返回值复制给变量
- A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls -la)等价于反引号
3.4 设置环境变量
基本语法:
- export 变量名 = 变量值(功能描述:设置环境变量的值)
- source 配置文件(功能描述:让修改后的配置信息立即生效)
- echo $变量名(功能描述:查询环境变量的值)
3.5 位置参数变量
基本语法:
- $n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
- $*(功能描述:这个变量代表命令行中所有的参数,**$把所有的参数看成一个整体*)
- $@(功能描述:这个变量也代表命令行中所有的参数,不过**$@把每个参数区分对待**)
- $#(功能描述:这个变量代表命令行中所有参数的个数)
#position.sh
#!/bin/bashecho "$1"
echo "$2"
echo "$3"
echo "$*"
echo "$@"
echo "$#"[root@hadoop100 xiyouji]# ./position.sh 10 20 30
10
20
30
10 20 30
10 20 30
3
3.6 预定义变量
基本语法:
- $$(功能描述:当前进程的进程号PID)
- $!(功能描述:后台运行的最后一个进程的进程号PID)
- $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个值为非0,则证明上一个命令执行不正确)
#!/bin/bashecho "$$"
./helloworld.sh &echo "$!"
echo "$?" #上一个命令执行是否正确
4 运算符
基本语法:
- "$((运算式))"或”$[运算式]
expr m + n
(注意expr运算符之间有空格)expr m - n
(注意expr运算符之间有空格)/*
,/
,%
,乘,除,取余
**案例:**计算(2+3) * 4的值
# 采用$[运算式]echo $[(2+3)*4]
# 采用expr分布计算A=`expr 2 + 3`expr $A \* 4
#expr一步完成计算expr `expr 2 + 3` \* 4
5 条件判断
5.1 判断语句
基本语法:[ condition ] (注意condition前后有空格)
如:[root]
返回true
[]
返回false
5.2 常用判断条件
- 整数之间比较
判断字符 | 意义 |
---|---|
= | 字符串比较 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
- 文件权限 进行判断
判断字符 | 含义 |
---|---|
-r | 读取权限 |
-w | 写入权限 |
-x | 执行权限 |
- 文件类型进行判断
判断字符 | 含义 |
---|---|
-f | 文件存在并且是一个常规的文件 |
-e | 文件存在 |
-d | 文件存在并且是一个目录 |
使用范例:
[ 23 -ge 22 ] 23
是否大于等于2[ -w student.txt ]
文件是否具有写权限[ -e /root/install.log ]
目录中的文件是否存在
6 流程控制
6.1 if判断
基本语法:if [ 条件判断式 ] then 程序 fi
**示例:**判断输入的数是否是等于123,是否等于456
#!/bin/bashif [ $1 -eq "123" ]#if与[] 与判断条件都必须有空格
thenecho “123”
elif [ $1 -eq "345"]
thenecho "345"
fi
6.2 case语句
基本语法:case 变量名 in "值1") 程序 ;; …… * 默认程序 esac ;;
示例:
#!/bin/bashcase $1 in"1")echo "1"
;;"2")echo "2"
;;*)echo "other"
;;
esac[root@hadoop100 xiyouji]# ./case.sh 1
1
[root@hadoop100 xiyouji]# ./case.sh 2
2
[root@hadoop100 xiyouji]# ./case.sh
other
6.3 for循环
基本语法:
for 变量 in 值1 值2 值3…… do 程序 done
for (( 初始值;循环控制条件;变量变化)) do 程序 done
示例:
- 打印输入参数
- 从1加到100
#!/bin/bashfor i in "$*"doecho "The Number is $i"done
for j in "$@"doecho "The Number is $j"done
:q[root@hadoop100 xiyouji]# ./for.sh 123 456 789 465
The Number is 123 456 789 465
The Number is 123
The Number is 456
The Number is 789
The Number is 465
#!/bin/bashsum=0
for((i=1;i<=100;i++))dosum=$[$sum+$i]done
echo "The sum from 1 to 100 is $sum"
6.4 while循环
基本语法:while (条件判断式) do 程序 done
**案例:**从1加到100
#!/bin/bashi=0
sum=0
while [ $i -le 100 ]dosum=$[$sum+$i]i=$[$i+1]doneecho "The sum from 1 to 100 is $sum"
7 read读取控制台输入
基本语法:read(选项)(参数)
选项:
- -p 指定读取值时的提示符
- -t 指定读取值时等待的时间(秒)
参数:指定读取值的变量名
案例:
[root@hadoop100 xiyouji]# read -t 5 -p "input your name:" NAME
input your name:CourageHe
[root@hadoop100 xiyouji]# echo $NAME
CourageHe
8 函数
8.1 系统函数
- basename(功能描述:删掉所有的前缀包括最后一个 **‘/’**字符,然后将字符串显示出来)
- dirname(功能描述:文件绝对路径,,从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录))
8.2 自定义函数
基本语法:[function] funname[()]{Action; [return int;]}
注意:
- 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其他语言一样先编译。
- 函数返回值,只能通过 $?系统变量活动,可以显示加:return返回,如果不加将以最后一条命令行运行结果,作为返回值。return后跟数值n(0-255)
#!/bin/bashfunction sum(){s=$[ $1+$2]echo "The sum of two number is $s"
}
read -p "The first Number1: " n1
read -p "The second NUmber2:" n2
sum $n1 $n2
Linux学习:sheel编程相关推荐
- Linux学习——网络编程基础及TCP服务器
目录 一.网络采用分层的思想: 二.各层典型的协议: 三.网络的封包和拆包: 四.网络编程的预备知识 4.1.SOCKET 4.2 IP地址 4.3 端口号 4.4 字节序 五.TCP编程API TC ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
- linux学习5-shell编程
2019独角兽企业重金招聘Python工程师标准>>> history 历史命令 history 选项 文件名 -c 清空历史命令 -w 把缓存中的历史命令写入历史命令保存文件 ~/ ...
- [LINUX学习]sheel脚本循环KILL,并启动
#!/bin/sh if [ -f ~/.bash_profile ]; then. ~/.bash_profile fi cd /home/ddata/server/ stop(){#kill 掉所 ...
- linux shell概述,Linux学习 -- Shell基础 -- 概述
Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串 双引号 ...
- linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...
学习linux环境高级编程首先学习的是文件的操作.因为有 学习 Linux 环境高级编程,首先学习的是文件的操作.因为有一句很有趣的话"Linux 下一切皆文件".所以掌握了文件操 ...
- 《Linux高性能服务器编程》学习笔记
<Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...
- Linux学习之嵌入式Linux编程文件IO(C语言版)
Linux学习之嵌入式Linux编程文件IO(C语言版) 一.文件IO常用函数 1.open 2.write 3.read 示例代码: #include <sys/types.h> #in ...
- linux下C++编程学习
前言(废话,可略过):之前一直在windows下做C++编程,后来换后台工作接触到linux下C++开发.期间磨磨唧唧浪费了很多时间.记录下历程,给后来的小伙伴提个醒,免得浪费宝贵时间. 一.关于换系 ...
- Linux学习笔记(3)- 网络编程以及范例程序
Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...
最新文章
- autoware使用相机和深度学习进行目标检测(六)
- ubuntu安装过程中遇到问题小结
- Python学习入门基础教程(learning Python)--3.2 if-else分支语句
- StringBuffer
- [转]敏捷开发中编写高质量Java代码
- 网络编程的4种IO模型
- Linux02-学习记录
- JavaScript 电话手机号码正则表达式
- python菜鸟教程100例-Python 练习实例4
- oracle 数据库er生成,oracle数据库生成er图
- 最小二乘法的思路及推导过程
- 干货! IT信息资产分类与信息分级管理规定
- python识字_python代码实现截图识字
- 装饰器模式实现咖啡店(Java代码实例)
- raft2020年更新_Raft6月1日更新了什么 Raft6月1日更新内容介绍
- json文件是什么?
- tensorflow的数据类型
- 研究日记:虚拟歌姬自动调教之歌曲音频切割的问题
- MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒
- 杜伽K320W键盘使用手册
热门文章
- 穿透路由器,解决内网远程桌面等
- 【NOIP2017提高组正式赛】列队
- UESTC -- 1061 秋实大哥与战争(暴力/set)
- 微信小程序通过云函数生成带参数的小程序码
- 图赏 Amazfit 跃我GTR 3超长21天续航,60秒出身体指标报告
- word2016安装Aurora,并添加到选项卡
- 文件包含漏洞(LFI、RFI)(require()、include()函数)
- BugKu CTF(杂项篇MISC)---细心的大象
- Linux input子系统分析之一:软件层次
- 利用OpenXml生成Word2007文档(转)