Shell脚本
本质:Shell命令的有序集合
特点:1、减轻管理员的工作量
2、提高处理文本文件的速度
Shell脚本是解释性语言,不需要编译
Shell编程的基本过程
1、建立Shell文件:vi demo.sh
2、赋予Shell文件的执行权限:chmod 0777 文件名 执行文件时用./demo.sh
ps:用./a.out的方式执行的话需要修改权限
3、执行Shell文件:bash demo.sh、sh demo.sh 不需要修改权限
Shell用户自定义变量
1、字母、数字、下划线开头,不以数字开头
2、变量前不需要数据类型
3、变量后不需要分号
变量的使用方法
1、变量在使用的时候不需要定义
2、变量在赋值时不能有空格
3、变量在被赋值时默认都是字符串,不管有没有使用
变量的引用
#!/bin/bash
val=1
echo $val
#!/bin/bash
var=date
echo $date??
echo -n $var:-n表示输出的时候不换行
echo -e $var:-e表示转义
eg.输入一个'\n' 不加-e会直接打印出'\n';加上-e会执行换行
位置变量
$0:脚本文件名
$1,$2...$9:第一个到第九个命令参数
$#: 命令行参数的个数
$@:所有命令行参数“$1...$9"
$?:前一个命令的退出的状态
$*:所有命令行参数"$1...$9"
$$:正在执行的进程的ID号
#!/bin/bash
echo "Program name is $0"
echo "There is totally $# parameters passed to this program"
echo "The last is $?"
echo "There parameters are $*"
字符串的相关操作
1、字符串的拼接
#!/bin/bash
var=5
var1=6
echo $var$var1
2、字符串的拷贝
#!/bin/bash
var=hello
var1=$var
3、字符串的长度
${#string} -- string为变量名
#!/bin/bash
var="hello"
echo ${#var}
4、提取字符串
1)${str:start:len}
#!/bin/bash
str="abcdefg"
echo ${str:1:4} #从第一个字符后面一个开始,提取长度为4的字符串
2)${str:start}
#!/bin/bash
str="abcdefg"
echo ${str:1} #表示从第一个字符后面一个开始,提取到末尾
3)${str:0-start:len}
#!/bin/bash
str="abcdefg"
echo ${str:0-5:4} #表示从右侧开始向左边找到start的位置,向后提取len个字符的长度
4)${str:0-5}
#!/bin/bash
str="abcdefg"
echo ${str:0-5} #表示从右侧开始向左边找到start的位置,向后提取到末尾
5)${str#*cd}
#!/bin/bash
str="abcdefgcdhij"
echo ${str#*cd} #表示从左侧开始找到第一次出现cd的位置,将cd后面的字符串显示出来
6)${str##*cd}
#!/bin/bash
str="abcdefcdgcdhij"
echo ${str##*cd} #从左侧开始找到最后一次出现cd的位置,将该cd后面的字符串显示出来
7)${str%cd*}
#!/bin/bash
str="abcdefgcdhij"
echo ${str%cd*} #表示从右向左搜索第一次出现cd的位置,搜索到之后将字符串左侧内容输出
8)${str%%cd*}
#!/bin/bash
str="abcdefgcdhij"
echo ${str%%cd*} #表示从右向左搜索最后一次出现cd的位置,搜索到之后将字符串左侧的内容输出
数组
1、在Shell中只支持一维数组,不支持多维数组,数组中成员都是字符串
2、Shell中定义的数组不需要指定元素的个数
数组的赋值
arr=(1 2 3 4 aa hello)
数组的显示
整个数组:echo ${arr[*]}、echo ${arr[@]}
单个数组元素:echo ${arr[3]}
获取某个元素的长度:echo ${#arr[4]}
清除数组中的某个元素:unset arr[5]
#!/bin/bash
arr=(1 2 3 4 aa hello)
echo ${arr[*]} #显示整个数组
echo ${arr[@]} #显示整个数组
echo ${arr[3]} #显示arr[3]
echo ${#arr[4]} #显示arr[4]的长度
unset arr[5] #删除arr[5]
清除数组:unset arr