shell学习杂记(二)
2011-02-10 16:14
190 查看
type +命令名 可以查看该命令是内置命令还是外部命令
type -a +命令可以查询命令执行路径
在一串命令中要引用其他命令提供的信息可以使用`命令`或者$(命令)
例如
cd /lib/modules/`uname -r`/kernel
ls -l $(locate crontab)
如果变量需要增加内容可以使用"$变量名称"或${变量}累加内容,如
给PATH变量增加内容PATH="$PATH":/home/bin或者PATH=${PATH}:/home/bin/或PATH=$PATH:/home/bin
如果变量需要在其他子进程引用可以使用export 变量名 进行输出为环境变量
取消变量设置unset
使用env或者export来显示环境变量,使用set显示环境变量和自定义变量的所有变量
linux下比较特殊的变量
$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n 该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2…)
$# 提供脚本的参数号
$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于$1$2
$? 前一个命令执行后的返回值
$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$! 前一个后台命令的进程号
变量的键盘读取
要读取来自键盘输入的变量可以使用read命令
read [-pt] 变量名
-t 后接等待的秒数
-p 后接提示符
read -p "Please keyin your name:" -t 30 named
会等待30秒输入你得名字然后作为named变量的值,在脚本中经常用到
declare可以用来声明变量的类型,一般变量默认类型是字符串的
-a 将变量声明为数组类型
-i 将变量声明为整数类型
-x 将变量设置为环境变量,同export +x将环境变量设置为自定义变量
-r 将变量设置为只读,不可修改,重新登录可以修改
#sum=10+20
#echo $sum
#10+20
此时bash是不会帮我们计算的,因为默认的变量类型为字符串
#declare -i sum=10+20
#echo $sum
#30 不过bash环境中的数值运算只能达到整数类型,所以1/3结果是0
数组类型变量 var(index)=content
index就是一些数字代表1,2,...,数组变量一般用在循环或者判断交互的脚本中
#var[1]="small min"
#var[2]="big min"
#var[3]="nice min"
#echo ${var[1]},${[2]},${[3]}
#small min,big min,nice min
变量的删除
#path=$PATH
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#echo ${path#/*local/bin:}
#/usr/sbin:/usr/bin:/sbin:/bin 从前开始删除了前面的两个内容
# echo ${path#/*:}
#/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 从前开始找冒号,找到第一个冒号就删除冒号之前的内容
#echo ${path##/*:}
#/bin 从前开始找到所有的冒号,删除冒号之前的内容就剩下最后一个目录
这里的目录都是以冒号分割的,要删除目录就是删除/到:之间的内容,所谓#就是从前开始找最短匹配,##就是从前开始找最长匹配,类似的还有%和%%分别是从后开始查找找最短和最长匹配
#echo ${path%:*bin}
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin 最后一个目录被删除了
#echo ${path%%:*bin}
#/usr/local/sbin 后面所有的目录都被删除了,只保留了第一个
关键是找到特征符然后确定从后或者是从前删除
变量的替换
#echo ${path/sbin/SBIN}
#/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 从头开始找sbin找到一个就执行替换,其后的不管了,只替换第一个。
#echo ${path//sbin/SBIN}
#/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin 执行全部替换
变量的测试与内容替换
1.测试变量是否存在不存在则赋值
#echo $username
为空
#username=$(username-root)
#echo $username
#root
2.若变量未设置或为空字符串则为变量赋值
#username=""
#username=${username-root}
#echo $username
为空,因为username被设置为空字符串了,所以值赋不上
#username=${username:-root}
#echo $username
#root 对于未设置或是空字符串的变量可以使用:-来赋值
在/etc/issue里面可以设置登录的系统信息,使用telnet方式登录的系统信息设置在/etc/issue.net 在/etc/motd里面可以设置登录系统时的提示信息
数据重定向
1. 将信息丢弃 2>/dev/null
2.将标准输出和标准错误输出重定向到一个文件中
A > list 2>&1 把命令执行A执行结果中的输出和错误输出都放入list文件
3. EOF只是一个分界符,其实你完全可以用abcde替换,也一样的功能,只是大家都习惯用EOF来表示。当s h e l l看到< <的时候,它就会知道下一个词是一个分界
符。在该分界符以后的内容都被当作输入,直到s h e l l又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
>>EOF.....EOF两个之间的值被当作输入,第二个EOF要单独一行
4. 使用tee可以将数据重定向到文件中并且在屏幕上也显示出来
tee -a 追加到文件中不覆盖
-号可以被用在管道中当作标准输入或者标准输出
很多命令不支持管道命令,可以使用xargs+命令
tr -d x删除文件中的x这个字符串
-s 替换掉重复的字符串
join和paste命令可以将两个文件连在一起
本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/490553
type -a +命令可以查询命令执行路径
在一串命令中要引用其他命令提供的信息可以使用`命令`或者$(命令)
例如
cd /lib/modules/`uname -r`/kernel
ls -l $(locate crontab)
如果变量需要增加内容可以使用"$变量名称"或${变量}累加内容,如
给PATH变量增加内容PATH="$PATH":/home/bin或者PATH=${PATH}:/home/bin/或PATH=$PATH:/home/bin
如果变量需要在其他子进程引用可以使用export 变量名 进行输出为环境变量
取消变量设置unset
使用env或者export来显示环境变量,使用set显示环境变量和自定义变量的所有变量
linux下比较特殊的变量
$0 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$n 该变量与脚本被激活时所带的参数相对应。n是正整数,与参数位置相对应($1,$2…)
$# 提供脚本的参数号
$* 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$@ 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,$@等价于$1$2
$? 前一个命令执行后的返回值
$$ 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$! 前一个后台命令的进程号
变量的键盘读取
要读取来自键盘输入的变量可以使用read命令
read [-pt] 变量名
-t 后接等待的秒数
-p 后接提示符
read -p "Please keyin your name:" -t 30 named
会等待30秒输入你得名字然后作为named变量的值,在脚本中经常用到
declare可以用来声明变量的类型,一般变量默认类型是字符串的
-a 将变量声明为数组类型
-i 将变量声明为整数类型
-x 将变量设置为环境变量,同export +x将环境变量设置为自定义变量
-r 将变量设置为只读,不可修改,重新登录可以修改
#sum=10+20
#echo $sum
#10+20
此时bash是不会帮我们计算的,因为默认的变量类型为字符串
#declare -i sum=10+20
#echo $sum
#30 不过bash环境中的数值运算只能达到整数类型,所以1/3结果是0
数组类型变量 var(index)=content
index就是一些数字代表1,2,...,数组变量一般用在循环或者判断交互的脚本中
#var[1]="small min"
#var[2]="big min"
#var[3]="nice min"
#echo ${var[1]},${[2]},${[3]}
#small min,big min,nice min
变量的删除
#path=$PATH
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#echo ${path#/*local/bin:}
#/usr/sbin:/usr/bin:/sbin:/bin 从前开始删除了前面的两个内容
# echo ${path#/*:}
#/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 从前开始找冒号,找到第一个冒号就删除冒号之前的内容
#echo ${path##/*:}
#/bin 从前开始找到所有的冒号,删除冒号之前的内容就剩下最后一个目录
这里的目录都是以冒号分割的,要删除目录就是删除/到:之间的内容,所谓#就是从前开始找最短匹配,##就是从前开始找最长匹配,类似的还有%和%%分别是从后开始查找找最短和最长匹配
#echo ${path%:*bin}
#/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin 最后一个目录被删除了
#echo ${path%%:*bin}
#/usr/local/sbin 后面所有的目录都被删除了,只保留了第一个
关键是找到特征符然后确定从后或者是从前删除
变量的替换
#echo ${path/sbin/SBIN}
#/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 从头开始找sbin找到一个就执行替换,其后的不管了,只替换第一个。
#echo ${path//sbin/SBIN}
#/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin 执行全部替换
变量的测试与内容替换
1.测试变量是否存在不存在则赋值
#echo $username
为空
#username=$(username-root)
#echo $username
#root
2.若变量未设置或为空字符串则为变量赋值
#username=""
#username=${username-root}
#echo $username
为空,因为username被设置为空字符串了,所以值赋不上
#username=${username:-root}
#echo $username
#root 对于未设置或是空字符串的变量可以使用:-来赋值
在/etc/issue里面可以设置登录的系统信息,使用telnet方式登录的系统信息设置在/etc/issue.net 在/etc/motd里面可以设置登录系统时的提示信息
数据重定向
1. 将信息丢弃 2>/dev/null
2.将标准输出和标准错误输出重定向到一个文件中
A > list 2>&1 把命令执行A执行结果中的输出和错误输出都放入list文件
3. EOF只是一个分界符,其实你完全可以用abcde替换,也一样的功能,只是大家都习惯用EOF来表示。当s h e l l看到< <的时候,它就会知道下一个词是一个分界
符。在该分界符以后的内容都被当作输入,直到s h e l l又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
>>EOF.....EOF两个之间的值被当作输入,第二个EOF要单独一行
4. 使用tee可以将数据重定向到文件中并且在屏幕上也显示出来
tee -a 追加到文件中不覆盖
-号可以被用在管道中当作标准输入或者标准输出
很多命令不支持管道命令,可以使用xargs+命令
tr -d x删除文件中的x这个字符串
-s 替换掉重复的字符串
join和paste命令可以将两个文件连在一起
本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/490553
相关文章推荐
- shell 学习杂记一
- Shell 学习杂记二
- Shell学习杂记一
- shell学习杂记(-)
- shell 学习杂记
- android adb shell and monkey 学习记录
- Shell脚本学习之控制语句
- Shell 学习笔记(三) 重定向
- Bash Shell 学习记录(一)
- 学习日记之shell通配符
- Shell脚本学习笔记
- shell学习1
- shell脚本学习第三天——特殊变量
- shell脚本学习-11(cut命令学习)
- shell学习5
- Shell 学习10 - Shell 注释
- shell脚本学习笔记
- 学习Shell脚本(第四天)
- shell学习指南-知识点总结
- shell 学习(1) 执行,管道,重定向,逻辑分隔,变量,引号,运算