shell脚本第一阶段
一、学习脚本的秘诀
多看(看懂)----》多模仿(多练)----》多思考
二、脚本的基本写法
#!/bin/bash
//脚本第一行,#! 魔法字符,指定脚本运行代码执行的程序。即它告诉系统这个脚本需要什么解释器来执行,也就是使用哪一种shell//以下内容是对脚本的基本信息的描述
# Name: 名字
# Desc: 描述describe
# Path: 存放路径
# Usage: 用法
# Update: 更新时间//下面就是脚本的具体内容
commands
...
三、脚本的执行方法
./xxx.sh或者绝对路径/shellbash/xxx.sh
也可以使用非标准执行:source xxx.sh或者bash xxx.sh或者. xxx.bash
四、批量重命名多个文件
rename file1 test1 file1?.jpg
五、变量的定义
1.变量的分类
本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
环境变量:当前进程有效,并且能够被子进程调用
查看当前用户的环境变量 env
查询当前用户的所有变量(临时变量与环境变量) set
export //将当前变量变成环境变量
export A=hello //临时将一个本地变量(临时变量)变成环境变量
env|grep ^A
永久生效:
vim /etc/profile 或者~/.bashrc
export A=hello
或者
A=hello
export A
说明:系统中有一个变量PATH,环境变量
export PATH=/usr/local/mysql/bin:$PATH
全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用
$HOME/.bashrc 当前用户的bash信息(aliase、umask等)
$HOME/.bash_profile 当前用户的环境变量
$HOME/.bash_logout 每个用户退出当前shell时最后读取的文件
/etc/bashrc 使用bash shell用户全局变量
grep --color=auto
umask
/etc/profile 系统和每个用户的环境变量信息
mycat_home=/usr/local/mycat/bin
export mycat_home
执行mycat命令
# mycat
$ mycat
/etc/profile-->$HOME/.bash_profile-->$HOME/.bashrc-->/etc/bashrc-->$HOME/.bash_logout
系统内置变量(内置bash中变量):shell本身已经固定好了它的名字和作用。
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
若退出状态值为0,表示命令运行成功
若退出状态值为127,表示command not found
若退出状态值为126,表示找到了该命令但无法执行(权限不够)
若退出状态值为1$2,表示没有那个文件或目录
$$:当前所在进程的进程号 echo $$ eg:kill -9 'echo $$' =exit 退出当前会话
$!:后台运行的最后一个进程号 (当前终端) # gedit &
!$ 调用最后一条命令历史中的参数
!!:调用最后一条命令历史
$#:脚本后面接的参数的个数
./1.sh a b c 输出结果为3
$*:脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@:脚本后面所有参数,参数是独立的,也是全部输出
$0:当前执行的进程/程序名 echo $0
$1~$9 位置参数变量
${10}~${n} 扩展位置参数变量 第10个位置变量必须用{}大括号括起来
变量定义规则:
shell中变量不分类型
变量名=变量值
等号两边不能有任何空格
变量名不能以数字或者特殊符号开头
变量名严格区分大小写
变量定义
有类型变量 declare -i/-r/-x/-a/-A
交互式定义变量read [-p/-n/-t/s] 变量名
数组定义
普通数组:元素的索引下标是整数
关联数组:元素的索引下标是字符串
定义数组:
array1[索引下标]=元素1
array2=([索引下标]=元素1 [元素下标]=元素2...)
变量获取
echo $变量名
echo ${变量名}
-----------------------------------------------------------------------------------------------------------------
四则运算
$(())
$[]
expr expr 1 + 1
let
n=1;let n=n=1
n=1;let n+=1
i++和++i
对变量没影响,对表达式有影响,i++先赋值再自增,++i先自增再赋值。