2015—01—23 Shell学习笔记基础(2)

环境变量用于进程前,必须用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(文件)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值