Shell 总结

2016/03/07
学习记录下

shell脚本变量的定义和作用

1.变量的定义
2.shell 中的变量名可以由字母、数字、下划线组成,但数字不能作为变量名的第一个字符
3.比如:name='penghui' sum=100;price=1.1 now_date=`date`(赋值给变量一定要加反引号,或者小括号)

变量怎么引用呢?

1.echo $name或者echo ${name}
2.为嘛加大括号,帮助解释器识别变量的边界
比如:
    
```
 echo "my name is cheng${name}penghui "
```
如果不加  那么解释器就会认为你的变量名字是$namepenghui  懂了吗亲

特殊变量怎么引用呢?

其实就是单引号和双引号以及反引号的引用方法
比如:
name='chengpenghui'
echo 'my name is $name' //单引号
echo "my name is ${name}" //双引号
echo name=`date`  //反引号的亲

shell环境变量 局部变量 预定义变量

环境变量

环境变量指:操作系统运行的变量,比如 PATH PWD
常见的环境变量有
1.PATH:系统路径.
2.HOME:当前用户家目录
3.HISTSIZE:保存历史命令记录的条数。
4.LOGNAME:当前用户登录名。
5.HOATNAME:主机名称,若应用程序要用到主机名的话,一般是从这个环境变量中的取得的.
6.SHELL:当前用户用的是哪种shell.
7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量.
8.MAIL:当前用户的邮件存放目录

怎么查看环境变量
echo $PATH
env

局部变量

在shell中自己定义的变量
作用域:定义开始到shell结束. 离开脚本  退出终端
操作:登录shell  申明变量  退出shell  打印变量 

预定于变量很重要

1.$# 位置参数的数量。(/bin/sh test.sh 1 3 5)
2.$* 所有位置参数的内容。
3.$? 命令执行后返回的状态。        # 0表示成功,非0表示失败。
4.$$ 当前进程的进程号。
5.$! 后台运行的最后一个进程号。   # 很少用,了解即可。
6.$0 当前执行的进程名。

登录linux  创建sh结尾文件  echo 输出,看输出结果

shell脚本的输入输出

echo
printf (可以格式化输出)
read(读取)

read name
echo $name
看输出结果

shell运算操作

let 
num=10
num2=20
let num3=num+num2

test比较运算

整数:
大于    -gt
小于	-lt
大于等于	-ge
小于等于	-le
等于	-eq
不等于	-ne

字符串比较

==
!=

逻辑运算

-a 与
-o 或

test文件测试

文件存在并且是一个常规文件    -f
文件不为空	-s
文件可读	-r
文件可写(修改)	-w 
文件可运行	-x
文件是一个目录名	-d
文件是一个符号链接	-h
文件名引用一个字符设备	-c
文件名引用一个块文件	-b

顺序分支

if [ 条件 ];then
    语句...
fi      

if [ 条件 ];then
    语句1...
else
    语句2...
fi

case语句

case分支语句的格式如下:

case $变量名 in                # 严格掌握其语法 
    模式1)                       # 右括号不能省
    命令序列1
    ;;                               # 两分号不能省
    模式2)
    命令序列2
    ;; 
    *)
    默认执行的命令序列 
    ;; 
esac                             #结尾反写case表示结束

for语句

for (( expr1;expr2;expr3 ))     # (()),注意
do
    statement
done

while语句

while expression   
do 
    statement
done

break和continue

break命令,会退出当前的循环并且将控制权传递到本循环后面的第一个命令.
continue命令,当在程序执行过程中遇到这个命令,就会忽略本次循环中剩余的命令,将控制权交给循环的顶部。

while read line

语法格式:
cat file.txt |while read line    # 此处的cat也可以是一个产生若干行的命令,如 find
do
  ....
done

function 函数

function  函数名()   # function可以省略,注意()内部不带任何参数。
{
命令1
命令2
. . .
}

注意函数导入的方法:  
.   空格符  文件名 

array 数组

数组的定义: 
数组名=(元素1 元素2  元素n)  
读取数组的某一个元素 :   echo ${myarray[下标值]}
数组元素的赋值:      myarray[下标值] = xxx 
显示数组的所有元素:  echo ${myarray[*]} 
获得数组的长度(元素的个数):  echo    ${#array[*]} 
删除一个数组元素: unset myarray[下标值]

手写实例 提交文件

#!/bin/bash
cat ./line.txt | while read myline
do
  
   rmyline=${myline//wwwtest/wwwroot}
   cp -rf  $myline $rmyline 2>/dev/null
   if [ $? -eq 0 ]
	then
		echo $mysqlin >/dev/null
	else
	   echo $myline > ./error.log
	fi
done

echo "复制完成。。。。"

手写实例 打包文件

#!/bin/bash
list= cat line.txt | xargs | sed -e '/^$/d'
datename=$(date +%Y%m%d%H%M%S)
cat line.txt | sed "s/wwwtest/wwwroot/g" | xargs tar -zcPf  /wwwbackup/"$datename".tar.gz
echo "打包文件名---->"$datename

手写实例 恢复文件

#!/bin/bash
filename=$1.tar.gz
tar -zxPf  /wwwbackup/"$filename"
if [ $? -eq 0 ]
	then
	   echo "文件已还原 还原版本号:"$filename
	else
	   echo "还原失败 失败版本号:"$filename 
fi

个人随笔

安静的等待,你若盛开,蝴蝶自来

承接高质量 网站开发 app开发 如有需要请点击About联系

作者 @承鹏辉