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 脚本的执行方式

  1. 输出脚本的相对路径/绝对路径
  2. bash/sh +脚本

3 shell中的变量

3.1 概述

  • Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量。
  • 系统变量:$HOME、$PWD、$SHELL、$USER等等
  • 显示当前shell中所有变量:set

3.2 定义变量

3.2.1 基本语法

  1. 定义变量: 变量=值
  2. 撤销变量: unset 变量
  3. 声明静态变量:readonly 变量
  4. 全局变量:export 变量

3.2.2 变量定义规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写
  4. 双引号和单引号有区别,双引号仅将空格脱意单引号会将所有特殊字符脱意

3.3 命令的返回值复制给变量

  1. A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
  2. A=$(ls -la)等价于反引号

3.4 设置环境变量

基本语法:

  1. export 变量名 = 变量值(功能描述:设置环境变量的值)
  2. source 配置文件(功能描述:让修改后的配置信息立即生效)
  3. echo $变量名(功能描述:查询环境变量的值)

3.5 位置参数变量

基本语法:

  1. $n(功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
  2. $*(功能描述:这个变量代表命令行中所有的参数,​**$把所有的参数看成一个整体*)
  3. $@(功能描述:这个变量也代表命令行中所有的参数,不过**$@把每个参数区分对待**)
  4. $#(功能描述:这个变量代表命令行中所有参数的个数)
#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 预定义变量

基本语法:

  1. $$(功能描述:当前进程的进程号PID)
  2. $!(功能描述:后台运行的最后一个进程的进程号PID)
  3. $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个值为非0,则证明上一个命令执行不正确)
#!/bin/bashecho "$$"
./helloworld.sh &echo "$!"
echo "$?" #上一个命令执行是否正确

4 运算符

基本语法:

  1. "$((运算式))"或”$[运算式]
  2. expr m + n (注意expr运算符之间有空格)
  3. expr m - n(注意expr运算符之间有空格)
  4. /*,/,%,乘,除,取余

**案例:**计算(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循环

基本语法:

  1. for 变量 in 值1 值2 值3…… do 程序 done
  2. 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编程相关推荐

  1. Linux学习——网络编程基础及TCP服务器

    目录 一.网络采用分层的思想: 二.各层典型的协议: 三.网络的封包和拆包: 四.网络编程的预备知识 4.1.SOCKET 4.2 IP地址 4.3 端口号 4.4 字节序 五.TCP编程API TC ...

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

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

  3. linux学习5-shell编程

    2019独角兽企业重金招聘Python工程师标准>>> history 历史命令 history 选项 文件名 -c 清空历史命令 -w 把缓存中的历史命令写入历史命令保存文件 ~/ ...

  4. [LINUX学习]sheel脚本循环KILL,并启动

    #!/bin/sh if [ -f ~/.bash_profile ]; then. ~/.bash_profile fi cd /home/ddata/server/ stop(){#kill 掉所 ...

  5. linux shell概述,Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  6. linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...

    学习linux环境高级编程首先学习的是文件的操作.因为有 学习 Linux 环境高级编程,首先学习的是文件的操作.因为有一句很有趣的话"Linux 下一切皆文件".所以掌握了文件操 ...

  7. 《Linux高性能服务器编程》学习笔记

    <Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...

  8. Linux学习之嵌入式Linux编程文件IO(C语言版)

    Linux学习之嵌入式Linux编程文件IO(C语言版) 一.文件IO常用函数 1.open 2.write 3.read 示例代码: #include <sys/types.h> #in ...

  9. linux下C++编程学习

    前言(废话,可略过):之前一直在windows下做C++编程,后来换后台工作接触到linux下C++开发.期间磨磨唧唧浪费了很多时间.记录下历程,给后来的小伙伴提个醒,免得浪费宝贵时间. 一.关于换系 ...

  10. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

最新文章

  1. autoware使用相机和深度学习进行目标检测(六)
  2. ubuntu安装过程中遇到问题小结
  3. Python学习入门基础教程(learning Python)--3.2 if-else分支语句
  4. StringBuffer
  5. [转]敏捷开发中编写高质量Java代码
  6. 网络编程的4种IO模型
  7. Linux02-学习记录
  8. JavaScript 电话手机号码正则表达式
  9. python菜鸟教程100例-Python 练习实例4
  10. oracle 数据库er生成,oracle数据库生成er图
  11. 最小二乘法的思路及推导过程
  12. 干货! IT信息资产分类与信息分级管理规定
  13. python识字_python代码实现截图识字
  14. 装饰器模式实现咖啡店(Java代码实例)
  15. raft2020年更新_Raft6月1日更新了什么 Raft6月1日更新内容介绍
  16. json文件是什么?
  17. tensorflow的数据类型
  18. 研究日记:虚拟歌姬自动调教之歌曲音频切割的问题
  19. MySQL最全整理(面试题+笔记+导图),面试大厂不再被MySql难倒
  20. 杜伽K320W键盘使用手册

热门文章

  1. 穿透路由器,解决内网远程桌面等
  2. 【NOIP2017提高组正式赛】列队
  3. UESTC -- 1061 秋实大哥与战争(暴力/set)
  4. 微信小程序通过云函数生成带参数的小程序码
  5. 图赏 Amazfit 跃我GTR 3超长21天续航,60秒出身体指标报告
  6. word2016安装Aurora,并添加到选项卡
  7. 文件包含漏洞(LFI、RFI)(require()、include()函数)
  8. BugKu CTF(杂项篇MISC)---细心的大象
  9. Linux input子系统分析之一:软件层次
  10. 利用OpenXml生成Word2007文档(转)