环境变量用于进程前,必须用export命令导出。
定义变量:
1,export oldboy = “I am oldboy”
2,变量名=valie;export 变量名
3,declare -x 变量名=value
/etc/profile.d
/etc/profile
env 或set printenv
unset (注销失效)
普通字符串变量定义
变量名 = value 数字、字符串、路径名
变量名 = 'value' 比较适合 纯字符串
变量名 = "value" 字符串中附带又变量的内容
习惯:数字不加引号,其他默认加双引号。
shell的中的变量要求:一般是字母,数字,下划线组成。字母开头。
eg.1
a=192.168.1.2
b='192.168.1.2'
c="192.168.1.2"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
输出结果:
a=192.168.1.2
b=192.168.1.2
c=192.168.1.2
eg2.在eg1的基础上加
a=192.168.1.2-$a
b='192.168.1.2-$a'
c="192.168.1.2-$a"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
输出结果:
a=192.168.1.2-192.168.1.2
b=192.168.1.2-$a (单引号直接显示,看到啥是啥,不解析)
c=192.168.1.2-192.168.1.2-192.168.1.2
全局变量和局部变量
a.脚本中的全局变量定义,在使用时,使用{ }将变量括起
b.脚本中的局部变量定义,存在于脚本函数中的变量,要以local方式进行声明,
把命令作为变量
a.cmd = `ls` tab键上的 反引号
b.cmd=$(date +%F) echo $cmd 打印时间
pro
1.若变量和其他字符组成新的变量就必须给变量加上{ }。
eg: tar zcf etc_${cmd}_oldboy.tar.gz /etc/....
2.养成所有的字符串变量用双引号括起来使用的习惯, $A 写成 "$A"或 "${A}"
应用场景:
1.对站点按天打包生成不同的文件名
2.对站点按机器 名、ip打包生成不同的文件名
1.Shell的特殊变量
a.$0 获取当前执行的shell脚本的文件名,包括路径。
b.$n 获取当前执行的shell脚本的第n个参数,当n大于9使用大括号${10}
//c.$* 获取当前执行的shell脚本的所有参数
d.$# 获取当前执行的shell命令行中总参数的总个数
"1 2 3 4" 一个整体一个参数
$0 都有 文件名 路径
dirname $0 文件名
basename $0 路径
2.进程状态变量
$$ 获取当前shell的进程号(PID)
$? 获取执行上一指令的返回值(0成功,非零失败) 判断上个命令是否成功。
返回值参考:
2 权限拒绝
1~125 表示运行失败,脚本命令、系统命令错误或参数传递错误
126 找到命令了,但是无法执行
127 未找到运行的命令
>128 命令被系统强制结束
//$_ 在此之前执行的命令或脚本的最后一个参数
eg1.
cd /etc
tar zcf service.tar.gz ./services
[ $? -eq 0 ] $$ echo ok
$*和$@的区别:
$* 就所有的命令行所有参数视为单个字符,等同于"$1$2$3"
$@ 将命令行的每个参数视为单独的字符串,等同于"$1" "$2" "$3"。这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。
bash内部变量
常用的内部命令有:echo eval exec export readonly read shift wait exit 和点(.)
shift 改变位置参数,每执行一次shift语句,都使所有的位置参数一次向左移动一个位置,并使位置参数$#减1,直到减到0为止
变量子串的常用操作
${#string} 返回字符串的长度 echo $OLDBOY|wc -m
${string:2} 从第二个开始取 或 删除前2个 2、、、、、n
${string:2:2} 从第二个开始取,取两个 cut -c 3-4 截取第3-4 个
${string%abc} 从结尾开始删,删除abc
${string#abc} 从开始开始删
/etc/init.d/crond 需要自己看
1).批量文件改名:
for f in `ls *.jpg`
do
mv $f `echo ${f%finished}.jpg`
done
2).变量结尾替换(使用${string/%substring/replace})
for a in `ls *.jpg`
do
mv $f `echo ${a/%jpg/JPG}`
done
rename .JPG(源) .jpg *.JPG(文件)
定义变量:
1,export oldboy = “I am oldboy”
2,变量名=valie;export 变量名
3,declare -x 变量名=value
/etc/profile.d
/etc/profile
env 或set printenv
unset (注销失效)
普通字符串变量定义
变量名 = value 数字、字符串、路径名
变量名 = 'value' 比较适合 纯字符串
变量名 = "value" 字符串中附带又变量的内容
习惯:数字不加引号,其他默认加双引号。
shell的中的变量要求:一般是字母,数字,下划线组成。字母开头。
eg.1
a=192.168.1.2
b='192.168.1.2'
c="192.168.1.2"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
输出结果:
a=192.168.1.2
b=192.168.1.2
c=192.168.1.2
eg2.在eg1的基础上加
a=192.168.1.2-$a
b='192.168.1.2-$a'
c="192.168.1.2-$a"
echo "a=$a"
echo "b=$b"
echo "c=${c}"
输出结果:
a=192.168.1.2-192.168.1.2
b=192.168.1.2-$a (单引号直接显示,看到啥是啥,不解析)
c=192.168.1.2-192.168.1.2-192.168.1.2
全局变量和局部变量
a.脚本中的全局变量定义,在使用时,使用{ }将变量括起
b.脚本中的局部变量定义,存在于脚本函数中的变量,要以local方式进行声明,
把命令作为变量
a.cmd = `ls` tab键上的 反引号
b.cmd=$(date +%F) echo $cmd 打印时间
pro
1.若变量和其他字符组成新的变量就必须给变量加上{ }。
eg: tar zcf etc_${cmd}_oldboy.tar.gz /etc/....
2.养成所有的字符串变量用双引号括起来使用的习惯, $A 写成 "$A"或 "${A}"
应用场景:
1.对站点按天打包生成不同的文件名
2.对站点按机器 名、ip打包生成不同的文件名
1.Shell的特殊变量
a.$0 获取当前执行的shell脚本的文件名,包括路径。
b.$n 获取当前执行的shell脚本的第n个参数,当n大于9使用大括号${10}
//c.$* 获取当前执行的shell脚本的所有参数
d.$# 获取当前执行的shell命令行中总参数的总个数
"1 2 3 4" 一个整体一个参数
$0 都有 文件名 路径
dirname $0 文件名
basename $0 路径
2.进程状态变量
$$ 获取当前shell的进程号(PID)
$? 获取执行上一指令的返回值(0成功,非零失败) 判断上个命令是否成功。
返回值参考:
2 权限拒绝
1~125 表示运行失败,脚本命令、系统命令错误或参数传递错误
126 找到命令了,但是无法执行
127 未找到运行的命令
>128 命令被系统强制结束
//$_ 在此之前执行的命令或脚本的最后一个参数
eg1.
cd /etc
tar zcf service.tar.gz ./services
[ $? -eq 0 ] $$ echo ok
$*和$@的区别:
$* 就所有的命令行所有参数视为单个字符,等同于"$1$2$3"
$@ 将命令行的每个参数视为单独的字符串,等同于"$1" "$2" "$3"。这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里的任何空白。
bash内部变量
常用的内部命令有:echo eval exec export readonly read shift wait exit 和点(.)
shift 改变位置参数,每执行一次shift语句,都使所有的位置参数一次向左移动一个位置,并使位置参数$#减1,直到减到0为止
变量子串的常用操作
${#string} 返回字符串的长度 echo $OLDBOY|wc -m
${string:2} 从第二个开始取 或 删除前2个 2、、、、、n
${string:2:2} 从第二个开始取,取两个 cut -c 3-4 截取第3-4 个
${string%abc} 从结尾开始删,删除abc
${string#abc} 从开始开始删
/etc/init.d/crond 需要自己看
1).批量文件改名:
for f in `ls *.jpg`
do
mv $f `echo ${f%finished}.jpg`
done
2).变量结尾替换(使用${string/%substring/replace})
for a in `ls *.jpg`
do
mv $f `echo ${a/%jpg/JPG}`
done
rename .JPG(源) .jpg *.JPG(文件)