这几篇博文主要记录博主的Linux 学习之路,用作以后回顾和参考。大家可以选择略过也可以作参考。

(一)Linux 初步笔记
(二)Linux 进阶笔记(一)
(三)Linux 进阶笔记(二)
(四)Shell 编程进阶笔记

Shell 变量

(一)bash 变量与变量分类

变量的分类:

  • 用户自定义变量:用户根据自己的需求定义的变量可以根据需求修改
  • 环境变量:主要保存的是和系统操作环境相关的数据,对系统生效的环境变量名和变量作用是固定的
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,并且作用是固定的
  • 预定义变量:是bash 中已经定义好的变量,变量名不能自定义,并且作用是固定的

用户自定义变量:

[变量名]=[变量值] : -> 注意两边不要有空格,如果变量中有空格需要加双引号
echo $[变量名] : -> 变量调用
[变量名]=“$[变量名]”[叠加值] : -> 变量的叠加
[变量名]=${[变量名]}[叠加值] : -> 变量的叠加
set : -> 所有变量的查看
set -u : -> 执行此命令后如果调用未声明的变量时会报错
unset [变量名] : -> 删除变量

bash 环境变量:

export [变量名]=[变量值] : -> 定义一个环境变量
env : -> 查看环境变量

环境变量与自定义变量的区别:
      环境变量时全局变量,而用户自定义变量是局部变量。用户自定义的变量只在当前的Shell 中生效,环境变量会在当前Shell 和这个Shell 的子Shell 中生效。环境变量可以自定义,但是对系统生效的环境变量是固定的。

位置参数变量:

预定义变量:

bash 语系变量:

locale : -> 查看当前系统语系
echo $LANG : -> 输出系统当前语系

(二)接收键盘输入

相关命令:

read [选项] [变量名]
选项:

  • -p “提示信息” : -> 在等待输入之前进行信息提示
  • -t [秒数] : -> 在等待用户输入的时候,防止一直等待输入
  • -n [字符数] : -> read 命令只接收指定的字符数,接收完成便会进行下一步
  • -s : -> 隐藏输入的数据,就像终端输入用户密码一样

Shell 运算符

(一)declare 声明变量类型

declare [+/-] [选项] [变量名]=[变量值]
选项:

  • -:给变量设定类型属性
  • +:取消变量的类型属性
  • -a:将变量声明为数组
  • -i:将变量声明为Integer 类型
  • -x:将变量声明为环境变量,和export 作用类似
  • -r:将变量声明为只读属性

declare -p : ->查询所有变量的属性
declare -p [变量名] : -> 查询指定变量的属性

一个简单的小应用实现运算:

[root@localhost ~]# declare -i  a=1
[root@localhost ~]# declare -i  b=2
[root@localhost ~]# declare -i sum=$a+$b
[root@localhost ~]# echo $sum
3

(二)数值运算的方法

一:如上使用declare 将变量声明为Integer 类型再进行运算
二:使用 expr 或let 进行运算

[root@localhost ~]# a=2
[root@localhost ~]# b=3
[root@localhost ~]# c=$(expr $a + $b)
[root@localhost ~]# echo $c
5[root@localhost ~]# let d=$a+$b
[root@localhost ~]# echo $d
5

三:”((运算式))”或“((运算式))” 或 “$[运算式]”

[root@localhost ~]# e=$(( $a + $b ))
[root@localhost ~]# echo $e
5

Shell 编程之环境变量配置文件

source 相关命令

source [配置文件] : ->修改系统配置文件后,必须注销用户才可以生效,使用source 命令不用注销重新登录用户
. [配置文件]

放张图在这里供以后作参考

Shell 编程之正则

(一)正则表达式

正则表达式与通配符的区别:

  • 正则表达式用来在文件中匹配符合条件的字符串,是包含匹配。grep、awk、sed、等命令支持正则表达式
  • 通配符用来匹配符合条件的文件名,通配符是完全匹配。

正则匹配规则:

(二)字符串截取

cut 相关命令:

cut [选项] [文件名]
选项:

  • -f [列号] : -> 提取第几列的数据
  • -d [分隔符] : -> 指定按照指定分隔符截取数据,默认使用制表符截取数据

简单例子:

[root@localhost ~]# grep "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
Jas:x:500:500:Jas Zhang:/home/Jas:/bin/bash[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root"
Jas:x:500:500:Jas Zhang:/home/Jas:/bin/bash[root@localhost ~]# grep "/bin/bash" /etc/passwd | grep -v "root" | cut -f 1 -d ":"
Jas

awk 相关命令:

awk ‘[条件一]{[动作一]}[条件二]{[动作二]}…’ [文件名]
条件(Pattern ): 一般使用关系表达式作为条件
动作(Action): 一般用于格式化输出

简单示例一(没有执行条件):

[root@localhost ~]# df -h
文件系统          容量  已用  可用 已用%% 挂载点
/dev/sda5              17G  5.2G   11G  33% /
tmpfs                 499M  276K  499M   1% /dev/shm
/dev/sda1             194M   28M  156M  16% /boot
/dev/sda2             2.0G  240M  1.6G  13% /home
/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.3_Final
[root@localhost ~]# df -h | awk '{print$1 "\t" $2}'
文件系统    容量
/dev/sda5   17G
tmpfs   499M
/dev/sda1   194M
/dev/sda2   2.0G
/dev/sr0    4.0G

简单示例二(带有执行条件):

[root@localhost ~]# df -h | awk 'BEGIN{print "check begin"} {print$1 "\t" $2} END{print "check end"}'
check begin
文件系统    容量
/dev/sda5   17G
tmpfs   499M
/dev/sda1   194M
/dev/sda2   2.0G
/dev/sr0    4.0G
check end

简单示例三(FS内置对象指定分隔符,并使用BEGIN 条件)

[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" |  awk '{FS=":"} {print $1 "\t" $2}'
root:x:0:0:root:/root:/bin/bash
Jas x[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" |  awk 'BEGIN{FS=":"} {print $1 "\t" $2}'
root    x
Jas     x

sed 相关命令:

sed [选项] ‘[动作]’ [文件名]
选项:

  • -n :一般sed 命令会把所有的数据都输出到屏幕上,-n 只会把经过sed 命令处理后得到的数据进行输出
  • -e :允许对输入数据应用多条sed 命令编辑
  • -i :用sed 命令的修改结果直接修改原文件,而不再输出到屏幕

动作:

  • a :追加,在当前行后追加一条或多条数据
  • c :行替换
  • i :插入,在当前行前插入一条或多条数据
  • d :删除指定行
  • p :打印输出指定的行数据
  • s :字符串替换,用一个字符串代替另一个字符串

简单示例:

[root@localhost ~]# df -h
文件系统          容量  已用  可用 已用%% 挂载点
/dev/sda5              17G  5.2G   11G  33% /
tmpfs                 499M  276K  499M   1% /dev/shm
/dev/sda1             194M   28M  156M  16% /boot
/dev/sda2             2.0G  240M  1.6G  13% /home
/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.3_Final
[root@localhost ~]# df -h | sed -n '1p'
文件系统          容量  已用  可用 已用%% 挂载点

(三)字符处理

sort排序命令:

sort [选项] [文件名]
选项:

  • -f :忽略大小写
  • -n :以整型数值排序,默认使用字符串排序
  • -r :反向排序
  • -t :指定分隔符,默认的分隔符是制表符
  • -k “m,n”:按照指定的字段范围进行排序

简单示例:

[root@localhost ~]# df -h | sort
/dev/sda1             194M   28M  156M  16% /boot
/dev/sda2             2.0G  240M  1.6G  13% /home
/dev/sda5              17G  5.2G   11G  33% /
/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.3_Final
tmpfs                 499M  276K  499M   1% /dev/shm
文件系统          容量  已用  可用 已用%% 挂载点[root@localhost ~]# df -h | sort -r
文件系统          容量  已用  可用 已用%% 挂载点
tmpfs                 499M  276K  499M   1% /dev/shm
/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.3_Final
/dev/sda5              17G  5.2G   11G  33% /
/dev/sda2             2.0G  240M  1.6G  13% /home
/dev/sda1             194M   28M  156M  16% /boot[root@localhost ~]# df -h | sort -n -k "5,5"
文件系统          容量  已用  可用 已用%% 挂载点
tmpfs                 499M  276K  499M   1% /dev/shm
/dev/sda2             2.0G  240M  1.6G  13% /home
/dev/sda1             194M   28M  156M  16% /boot
/dev/sda5              17G  5.2G   11G  33% /
/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.3_Final

wc 统计命令:

wc [选项] [文件名]
选项:

  • -l :只统计行数
  • -w :只统计单词数
  • -m :只统计字符数

Shell Script

(一)简单if 条件语句

简单用例(一):判断当前用户是不是root

[root@localhost ~]# echo $USER
root
[root@localhost ~]# vim test.sh
#!/bin/bash

test=$USERif [ "$test" == "root" ]thenecho "I'm root"
elseecho "I'm not root"
fi[root@localhost ~]# bash test.sh
I'm root

简单用例(二):判断用户输入的字符串是不是一个目录

[root@localhost ~]# vim test.sh
#!/bin/bash

read -p "please input a dir: " dirif [ -d "$dir" ]thenecho "It's a dir"
elseecho "It's not a dir"
fi[root@localhost ~]# bash test.sh
please input a dir: /root
It's a dir
[root@localhost ~]# bash test.sh
please input a dir: /root123
It's not a dir

(二)case 语句

简单用例:

[root@localhost ~]# vim test.sh#!/bin/#!/bin/bash# 练习 case 语句的使用read -p "Please confirm to formate the disk (Y/N) : " inputcase "$input" in"Y") echo 'Your choosen is Y';;"N") echo 'Your choosen is N';;*)echo 'Error!'
;;esac[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : Y
Your choosen is Y
[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : N
Your choosen is N
[root@localhost ~]# bash test.sh
Please confirm to formate the disk (Y/N) : a
Error!

(三)for 语句


简单用例(求和):

[root@localhost ~]# vim test.sh#!/bin/#!/bin/bashsum=0for(( i=0;i<=100;i++))dosum=$(( $sum+$i ))doneecho $sum[root@localhost ~]# bash test.sh
5050

(四)while 与 until 语句


while 与 until 语句的区别是while 中的条件判断为真时才进行循环,until 是判断条件为假时进行循环

Shell 编程进阶笔记相关推荐

  1. [SuperM]Shell编程课堂笔记+PPT总结

    [SuperM]Shell编程课堂笔记+PPT总结 转载于:https://www.cnblogs.com/DreamDrive/p/4800818.html

  2. SHELL编程学习笔记

    SHELL编程学习笔记 本文描述unix shell的各种应用实例,根据查阅资料和自我总结,作为自己今后复习的模板.本文搜集整理常用的shell应用实例,以例子详述unixshell部分命令的使用,着 ...

  3. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  4. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  5. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

  6. Linux Shell编程学习笔记(3)

    Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量   什么是位置参数?   位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...

  7. shell编程进阶技能详细介绍

    Shell脚本编程进阶 一.循环 1.for循环 2.while循环 3.until循环 4.循环控制语句continu 5.循环控制语句break 6.循环控制shift命令 7.while特殊用法 ...

  8. Shell编程进阶篇(完结)

    1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或 ...

  9. 【Linux系统管理】10 Shell 编程进阶篇

    六 Shell 编程 6.1 正则表达式 6.1.1 概述 还记得我们在上一章说过正则表达式和通配符的区别(正则表达式用来在文件中匹配符合条件的字符串,通配符用来匹配符合条件的文件名)吗?其实这种区别 ...

最新文章

  1. Hive Serde、Beeline、JDBC
  2. Java计算一段程序的运行时间
  3. mysql如果带有换行的处理方式
  4. GRE Sub math 报名
  5. 802.1X基本配置
  6. elasticsearch部署
  7. 数值计算与优化(共轭梯度法和QR)
  8. Gartner发布2011十大关键技术
  9. 项目疑难杂症记录(五):fragment生命周期都回调了,却不见其页面展示
  10. Python学习心路历程
  11. java 获得平台编码_关于Java平台的编码
  12. shell 批量修改文件名字
  13. div+css中的为什么要设置浮动属性,浮动完了为什么又要清除浮动
  14. 5006.推荐初学者几本CCNA教程和材料
  15. 遗传算法基本原理及在互联网中的应用
  16. C语言求阶乘尾数零的个数
  17. Hitting the database(Chapter 5 of Spring In Action)
  18. HIVE修改列顺序中的坑
  19. 洛谷 P1008三连击 C语言
  20. 倾斜模型精细化处理_无人机倾斜摄影技术的三维精细模型制作

热门文章

  1. 十大经典排序算法之选择排序及其优化
  2. LeetCode 两数之和
  3. TensorFlow 2——【module ‘tensorflow.compat.v1‘ has no attribute ‘contrib‘】解决方案
  4. Navicat——连接SQL Server数据库方法
  5. linux lvm管理实例,Linux系统管理之LVM案例
  6. RocketMQ 核心
  7. JavaWeb学习之路——SSM框架之Spring(五)
  8. 获取json对象的长度
  9. 数据库系统(二)——数据更新和视图
  10. 远程命令执行与代码执行(remote command/code execute)漏洞总结