1.linux中的变量

linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结束后变量无法保留。

设置环境变量的方法:

1.export命令 用户退出后失效

  1. export test=12312

2..bash_profile、.bashrc、etc/bashrc或者etc/profile中定义

  1. 用户的环境变量:
  2. ls /root/.bashrc(推荐文件)
  3. ls /root/.bash_profile
  4. 全局变量配置
  5. /etc/profile
  6. etc/bashrc(推荐)
  7. 所有环境变量应该为大写

查看环境变量:

  1. env查看环境变量列表
  2. set 输出所有变量(包括环境变量和普通变量)

unset消除环境变量

  1. unset $PATH
2.变量定义
本地变量定义三种方法:

a=123+ $a 变量会被解析

  1. a=123
  2. b=123$a
  3. echo $b

输出以下:

  1. 123123

a='123 + $a' 变量不会被解析,单引号中的字符串原样输出

a=123

b='123$a'

echo $b

输出为:

  1. 123$a

a="123" 变量解析--一般用此种方法定义变量

  1. a=123
  2. b="123$a"
  3. echo $b
命令结果作为变量的值(常见用法):
  1. a=$(ls)

3.对于字符串的操作

输出字符串长度:

name="testName"

方法一:

  1. echo ${#name}

输出结果:

  1. 8

方法二:

  1. echo ${name}|wc -L

方法三:

  1. expr length "${name}"
截取字符串内容:

首先定义字符串:

  1. name=testNametestName

截取字符串:

  1. echo ${name:2} 从第二位开始截取

输出结果:

  1. stNametestName
字符串匹配
  1. echo ${name#t*N} 从头开始最短匹配

输出为:

ametestName

最长匹配:

  1. echo ${name##t*N} 从头开始最长匹配

输出为:

ame

从尾开始匹配:

  1. echo ${name%N*e}

输出为:

  1. testNametest

最长匹配:

echo ${name%%N*e}

test

字符串的替换:
  1. echo ${name/test/test1} 从头匹配替换第一个
  2. echo ${name//test/test1} 从头匹配替换所有
将以下文件名中的all去掉
  1. test-all-1.txt test-all-2.txt test-all-3.txt test-all-4.txt test-all.txt

脚本为:

  1. for f in $(ls *.txt)
  2. do
  3. mv ${f} ${f//all/}
  4. done

4.算术运算

方法一:

  1. echo $((2+2))
  2. 4

方法二:

  1. let a=12+12
  2. echo ${a}
  3. 24

方法三:

  1. expr 12 % 3
  2. 0
  3. echo "123 122" |awk '{print ($1-$2)}'
  4. $[] echo $[12+12] a=$[12+12+12]

5.条件判断语句:

方法一:

  1. test
  2. test -f test4.txt && echo true || echo false

方法二:

  1. []
  2. [ -f test4.txt ] && echo true || echo false 文件test4.txt存在输出true,不存在输出false

方法三:

  1. [[]] 括号前后加空格
  2. [[ -f test4.txt ]] && echo true || echo false

字符串测试:

  1. [ -z "" ] && echo false -z 字符串长度为0的时候为真
  2. [ -n "test" ] && echo true || echo false -n 字符串长度不为0的时候为真
  3. [ "test" == "test" ] && echo true 字符串是否相等 同= !=
  4. 等号和中括号两端需要有空格
  5. 整数的比较:
  6. [ 2 -eq 3 ] && echo true || echo false
  7. 逻辑操作符:
  8. -a -o 与或非
  9. [ 2 -eq 2 -a 3 -eq 3 ] && echo true || echo false

6.if条件语句

  1. 单分支结构:
  2. if<条件表达式>
  3. then
  4. 指令
  5. fi
  6. if <条件表达式>; then
  7. 指令
  8. fi

多分支:

  1. if<条件表达式>
  2. then
  3. else
  4. fi

多分支:

  1. if<条件表达式>
  2. then
  3. elif<条件表达式>
  4. then
  5. else
  6. fi

7.shell函数

functiontest.sh脚本内容:

  1. function testFun(){
  2. echo "function test! hello $1";
  3. }
  4. testFun $1
  5. sh functiontest.sh testname

while和until循环

  1. while<条件表达式>
  2. do
  3. 命令
  4. done
  5. until<表达式>
  6. do
  7. done

脚本后台运行:

  1. sh functiontest.sh&
  2. control + c 停止
  3. control + z 暂停

for 语句

  1. for((i=1;i<5;i++))
  2. do
  3. echo $i
  4. done

select 语句

  1. select name in ywp hf csq
  2. do
  3. echo $name
  4. done

break n 跳出整个循环

continue n 跳出本次循环

数组:

array=(ywp hf jc yc)

echo ${array[1]}

方法二:

  1. array=([1]=one [2]=two [3]=threee )
  2. echo ${array[1]}
  3. echo ${array[*]} *打印整个数组的内容

for循环打印数组内容

  1. array=(test1 test2 test3)
  2. for name in ${array[*]}
  3. do
  4. echo ${name}
  5. done

动态数组:

  1. array=($(ls))
  2. echo ${array[*]}
  3. echo ${#array[*]} 打印数组长度

9.shell脚本开发规范

  1. 1.全局变量 全部大写
  2. 2.局部变量 驼峰
  3. 3.变量引用 ${}
  4. 4.字符串变量引用 "${}"
  5. 5.统一使用.sh命名
  6. 6.启动和停止统一使用startstop开头
  7. 7.通用变量放在config目录下
  8. 8.中括号两边添加空格

shell脚本调试:

  1. sh [-nvx] test.sh
  2. -n 不执行,仅检查语法问题
  3. -x将执行的脚本输出到屏幕上

vim 配置:

  1. echo 'alias vi=vim' >>/Users/xxx/.bash_profile
  2. source /Users/xxx/.bash_profile

对于vim的推荐配置和使用shell脚本的一个实践:

shell脚本生成数据库文档

vim推荐配置

Shell脚本编程的更多相关文章

  1. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  2. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  3. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  4. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  5. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  6. 【Linux】Shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/

  8. Shell脚本编程总结及速查手册

    Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...

  9. 关于shell脚本编程的10个最佳实践

    每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...

  10. 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记

    第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...

随机推荐

  1. 消除ImageButton背景图片

    下图被选为作为ImageButton的Src,可它自带了个灰色的背景图,而我只想用这个圆圈作为imageButton的src,这怎么办呢? 遇到此情况可以设置imagebutton的backgroun ...

  2. 制作centos安装u盘

    格式化 mkfs.vfat /dev/sdb1 制作 dd if=CentOS-7-x86_64-Minimal-1503-01.iso of=/dev/sdb # 1. 注意是/dev/sdb 不是 ...

  3. IOS 进程描述

    ● 什么是进程 ● 进程是指在系统中正在运行的一个应用程序 ● 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 ● 通过“活动监视器”可以查看Mac系统中所开启的进程

  4. 【BZOJ3668】[NOI2014] 起床困难综合症(位运算思想)

    点此看题面 大致题意: 给定一些位运算操作,让你在\(0\sim m\)范围内选一个初始值,使其在经过这些运算后得到的结果最大. 前置技能:关于位运算 作为一道位运算的题,如果你不知道什么是位运算,那 ...

  5. 倍增LCA

    前言 在做树上问题时,我们经常会遇到 \(LCA\)(最近公共祖先)问题.曾经的我遇到这类问题只会\(O(n)\)暴力求解,学了倍增\(LCA\),就可以\(O(logn)\)解决了. 简介 倍增\( ...

  6. 【HDU4507】恨7不成妻(数位DP)

    点此看题面 大致题意: 让你求出一段区间内与\(7\)无关的数的平方和.与\(7\)无关的数指整数中任意一位不为\(7\).整数的每一位加起来的和不是\(7\)的整数倍.这个整数不是\(7\)的倍数. ...

  7. 【转】Web实时通信之Socket.IO ,真正的兼容ie

    前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序. 但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比 ...

  8. 2018.6.19 Java核心API与高级编程实践复习总结

    Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...

  9. Python实现注册和登录

    一.注册账号需要实现的功能 1.输入:用户名,密码,密码确认 2.限制1:输入的账号和密码不能为空 3.限制2:两次输入密码必须一致 4.限制3:用户名不能重复 5.限制4:错误次数为4次 6.用字典 ...

  10. Spring Boot 前世今生

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 ...