Shell脚本编程
1.linux中的变量
linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结束后变量无法保留。
设置环境变量的方法:
1.export命令 用户退出后失效
export test=12312
2..bash_profile、.bashrc、etc/bashrc或者etc/profile中定义
用户的环境变量:
ls /root/.bashrc(推荐文件)
ls /root/.bash_profile
全局变量配置
/etc/profile
etc/bashrc(推荐)
所有环境变量应该为大写
查看环境变量:
env查看环境变量列表
set 输出所有变量(包括环境变量和普通变量)
unset消除环境变量
unset $PATH
2.变量定义
本地变量定义三种方法:
a=123+ $a 变量会被解析
a=123
b=123$a
echo $b
输出以下:
123123
a='123 + $a' 变量不会被解析,单引号中的字符串原样输出
a=123
b='123$a'
echo $b
输出为:
123$a
a="123" 变量解析--一般用此种方法定义变量
a=123
b="123$a"
echo $b
命令结果作为变量的值(常见用法):
a=$(ls)
3.对于字符串的操作
输出字符串长度:
name="testName"
方法一:
echo ${#name}
输出结果:
8
方法二:
echo ${name}|wc -L
方法三:
expr length "${name}"
截取字符串内容:
首先定义字符串:
name=testNametestName
截取字符串:
echo ${name:2} 从第二位开始截取
输出结果:
stNametestName
字符串匹配
echo ${name#t*N} 从头开始最短匹配
输出为:
ametestName
最长匹配:
echo ${name##t*N} 从头开始最长匹配
输出为:
ame
从尾开始匹配:
echo ${name%N*e}
输出为:
testNametest
最长匹配:
echo ${name%%N*e}
test
字符串的替换:
echo ${name/test/test1} 从头匹配替换第一个
echo ${name//test/test1} 从头匹配替换所有
将以下文件名中的all去掉
test-all-1.txt test-all-2.txt test-all-3.txt test-all-4.txt test-all.txt
脚本为:
for f in $(ls *.txt)
do
mv ${f} ${f//all/}
done
4.算术运算
方法一:
echo $((2+2))
4
方法二:
let a=12+12
echo ${a}
24
方法三:
expr 12 % 3
0
echo "123 122" |awk '{print ($1-$2)}'
$[] echo $[12+12] a=$[12+12+12]
5.条件判断语句:
方法一:
test
test -f test4.txt && echo true || echo false
方法二:
[]
[ -f test4.txt ] && echo true || echo false 文件test4.txt存在输出true,不存在输出false
方法三:
[[]] 括号前后加空格
[[ -f test4.txt ]] && echo true || echo false
字符串测试:
[ -z "" ] && echo false -z 字符串长度为0的时候为真
[ -n "test" ] && echo true || echo false -n 字符串长度不为0的时候为真
[ "test" == "test" ] && echo true 字符串是否相等 同= !=
等号和中括号两端需要有空格
整数的比较:
[ 2 -eq 3 ] && echo true || echo false
逻辑操作符:
-a -o ! 与或非
[ 2 -eq 2 -a 3 -eq 3 ] && echo true || echo false
6.if条件语句
单分支结构:
if<条件表达式>
then
指令
fi
if <条件表达式>; then
指令
fi
多分支:
if<条件表达式>
then
else
fi
多分支:
if<条件表达式>
then
elif<条件表达式>
then
else
fi
7.shell函数
functiontest.sh脚本内容:
function testFun(){
echo "function test! hello $1";
}
testFun $1
sh functiontest.sh testname
while和until循环
while<条件表达式>
do
命令
done
until<表达式>
do
done
脚本后台运行:
sh functiontest.sh&
control + c 停止
control + z 暂停
for 语句
for((i=1;i<5;i++))
do
echo $i
done
select 语句
select name in ywp hf csq
do
echo $name
done
break n 跳出整个循环
continue n 跳出本次循环
数组:
array=(ywp hf jc yc)
echo ${array[1]}
方法二:
array=([1]=one [2]=two [3]=threee )
echo ${array[1]}
echo ${array[*]} *打印整个数组的内容
for循环打印数组内容
array=(test1 test2 test3)
for name in ${array[*]}
do
echo ${name}
done
动态数组:
array=($(ls))
echo ${array[*]}
echo ${#array[*]} 打印数组长度
9.shell脚本开发规范
1.全局变量 全部大写
2.局部变量 驼峰
3.变量引用 ${}
4.字符串变量引用 "${}"
5.统一使用.sh命名
6.启动和停止统一使用start和stop开头
7.通用变量放在config目录下
8.中括号两边添加空格
shell脚本调试:
sh [-nvx] test.sh
-n 不执行,仅检查语法问题
-x将执行的脚本输出到屏幕上
vim 配置:
echo 'alias vi=vim' >>/Users/xxx/.bash_profile
source /Users/xxx/.bash_profile
对于vim的推荐配置和使用shell脚本的一个实践:
Shell脚本编程的更多相关文章
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 【Linux】Shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/
- Shell脚本编程总结及速查手册
Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...
- 关于shell脚本编程的10个最佳实践
每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...
- 《Linux命令行与shell脚本编程大全》 第二十七章 学习笔记
第二十七章:shell脚本编程进阶 监测系统统计数据 系统快照报告 1.运行时间 uptime命令会提供以下基本信息: 当前时间 系统运行的天数,小时数,分钟数 当前登录到系统的用户数 1分钟,5分钟 ...
随机推荐
- 软件License设计
如何保护软件版权,最常用的办法就是设计一套license验证框架. 1.我们的常规需求如下: .可以限制软件只能在一台机器上使用: 目前很多软件都是一机一码的销售,软件换一台机器则不能使用,想要几台机 ...
- cms-登陆
先介绍下登陆的思路: 1.在登陆页面首先前端验证用户名和密码是否正确,如果验证通过,则ajax的方式向后台提交数据. 2.在controller层,将得到的用户名名和密码封装进shiro的token, ...
- UVA Stacks of Flapjacks 栈排序
题意:给一个整数序列,输出每次反转的位置,输出0代表排序完成.给一个序列1 2 3 4 5,这5就是栈底,1是顶,底到顶的位置是从1~5,每次反转是指从左数第i个位置,将其及其左边所有的数字都反转,假 ...
- Javascript 向量
向量 既有大小又有方向的量叫做向量(亦称矢量),与标量相对,用JS实现代码如下,直接搬miloyip的了 Vector2 = function(x, y) { this.x = x; this.y = ...
- 面向服务架构SOA
面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型.它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来:接口是采用中 ...
- js 实现纯前端将数据导出excel两种方式,亲测有效
由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,兼容chrome没问题,其他还没有测试过 通过将json遍历进行字符串拼接,将字符串输出到csv文件,输出的文件不会再是 ...
- 前端面试题1:Object.prototype.toString.call() 、instanceof 以及 Array.isArray()三种方法判别数组的优劣和区别
1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...
- 关于微信小程序 textarea组件在fixed定位的模块中随页面移动问题
具体的情况: 在模拟器中没问题,可是在真机下就出现以下问题, <textarea />在一个view盒子中,view盒子是固定定位,页面滑动时候,固定定位的盒子会定在屏幕的相对位置,但 ...
- Vue3.0脚手架搭建
https://www.jianshu.com/p/fbcad30031c2 vue3.0官网:https://cli.vuejs.org/zh/guide/ 介绍: notice: 这份文档是对应 ...
- django+xadmin在线教育平台(四)
3-2 配置表单页面 必要的该说的,该了解的 前置条件: 你已经学习了前面教程.将项目的文件夹目录结构,setting配置等修改完毕与我保持一致. 本节通过Django快速的配置一个留言板页面来学习 ...