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脚本生成数据库文档

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. 关于web开发中订单自动超时和自动收货的简单方法(window server)

    最近做一个订单自动超时和自动收货的功能,因为以前是用的mysql 存储过程和定时器来完成,这次的业务逻辑相对复杂用以前的方式就不太合适,本来是准备使用定时执行php脚本来实现的,后来发现业务逻辑中使用 ...

  2. ASP.NET中 前后台方法的相互调用

    后台调用前台js方法: this.Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "ShowM ...

  3. springMvc-reset风格和对静态资源的管理

    1.所谓rest风格及比较优雅的,没有一大堆后缀的风格 2.对静态资源的管理,及样式.图片等不需要springMvc过滤 代码: 1.在springMvc的配置文件中添加mvc标签 <?xml ...

  4. Weka 二次开发使用心得

    Weka 二次开发使用心得 一.weka数据挖掘流程 使用weka图形界面,初步尝试了下数据的预处理.分类.关联等操作,因为weka本身就是一个开源的机器学习库,于是想自己尝试下利用weka的api进 ...

  5. linux 命令——42 kill (转)

    Linux 中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以 使用Ctrl+C键,但是,对于一个后台进程 ...

  6. [转载]AngularJS入门教程01:静态模板

    为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两 ...

  7. UVA 11990 ``Dynamic'' Inversion (线段树套BIT,分治)

    题目要求可转化为查询一个区间内有多少数比val大(或者小). 区间用线段树分解(logN),每个区间维护一rank树. rank可用BIT查询,往BIT里面插值,为了保证不同区间的BIT互不影响要先离 ...

  8. 【BZOJ4327】[JSOI2012] 玄武密码(AC自动机的小应用)

    点此看题面 大致题意: 给你一个长度为\(len\)的文本串和\(n\)个模式串,让你求出每一个模式串的前缀与文本串的最大匹配串长度(其中模式串和文本串都只由字符'E','S','W','N'组成). ...

  9. SEO人士一定要了解的搜索引擎惩罚原则

       SEO人士一定要了解的搜索引擎惩罚原则 SEO 的人一般都知道SEO分为白帽,黑帽,甚至还有灰帽.简单说,如果你熟读过谷歌网站质量指南,就可以了解,符合搜索引擎质量规范并且符合用户体验的SEO ...

  10. os.walk 模块

    os.walk()可以得到一个三元tupple(dirpath, dirnames, filenames),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件. 其中dirpa ...