shell基本
2015-06-23 14:19
387 查看
1. 按行读取文件
2. shell日期
3. 分号, 多行命令分割符号如:
双分号;;可以作为case的终止结束符号
4. 双引号, 单引号, 逗号, 点
" 字符串中大部分字符会阻止(不解析, 作为普通字符串)
' 字符串所有的字符会阻止(echo '$var' 将输出$var )
, 逗号, 链接算术运算但只返回最后一项 如 let "a = ((b=3, 5*10))" # a=50, b=3
5. 转意\ \x 等价 "x" 也等价于 'X'
6. 冒号: 空命令, 该命令返回true(0) 如
检测变量是否设置
: "${username?}“ # username: parameter null or not set 没有被设置的情况
7. $
$var 变量引用
${} 参数替换
$? 命令执行退出状态码,0 为正常
$$ 进程ID变量
$*, $@ 所有的位置参数
$# 变量个数
正则表达式结束符
8. () 命令组,如(a=shit; echo $a), 命令组作为子shell运行, 所以父进程不能使用子进程的变量
9 [ ] 条件测试 [[ ]] 测试 [ ] 数组元素
10. (()) 整数扩展
11. IFS 内部分割符号
13. 返回码 exit
脚本调用结束, 都会有一个返回值, 0表示成功,非0表示不成功, 返回值必须在0-255, 必须是整数. 不写的话等价 exit $?
14 if 测试命令返回, 也就是if command , command并非一定是[ ], [[ ]]. 同时[[ ]] 不一定非与if不可 如: [ 1 -ne 2 ] && echo "1 not eq 2"
if的嵌套
14. (( )) 算术扩展表达式, 如果表达式的结果未0则命令返回非0, 就是假。与命令退出码恰好相反, 参考13点
15. 常用的测试符号
-n(-z) 测试变量是否存在(未定义或者是NULL)
-e 文件是否存在
-f 是否是否文件
f1 -nt f2 文件f1比文件f2新(-ot 比较旧)
字符串比较的时候,为了安全, 可以添加一个字符 如: [[ "x$a" == "x$b" ]]
例子:
字符串查找,匹配,子串 ,正则处理bash都可以很好的处理
#!/bin/bash exec < a.txt while read line do echo $line done
2. shell日期
u=`date "+%Y-%m-%d %H:%M:%S"` echo $u echo $u >> d.logkkkk
3. 分号, 多行命令分割符号如:
echo "begin bak..." ; cp $filename $filename.bak
if [ $var -eq 0 ]; then
双分号;;可以作为case的终止结束符号
4. 双引号, 单引号, 逗号, 点
" 字符串中大部分字符会阻止(不解析, 作为普通字符串)
' 字符串所有的字符会阻止(echo '$var' 将输出$var )
, 逗号, 链接算术运算但只返回最后一项 如 let "a = ((b=3, 5*10))" # a=50, b=3
5. 转意\ \x 等价 "x" 也等价于 'X'
6. 冒号: 空命令, 该命令返回true(0) 如
检测变量是否设置
: "${username?}“ # username: parameter null or not set 没有被设置的情况
while : do sleep 1 doneif 成立啥不做
a=0 if [ $a -eq 1 ]; then : else echo "eq" fi清空某个文件
: > data.log
7. $
$var 变量引用
${} 参数替换
$? 命令执行退出状态码,0 为正常
$$ 进程ID变量
$*, $@ 所有的位置参数
$# 变量个数
正则表达式结束符
8. () 命令组,如(a=shit; echo $a), 命令组作为子shell运行, 所以父进程不能使用子进程的变量
prog_dir=$(cd $(dirname $0)/..; pwd) # 切换到脚本目录,这样能避免很多路径问题
9 [ ] 条件测试 [[ ]] 测试 [ ] 数组元素
10. (()) 整数扩展
11. IFS 内部分割符号
#!/bin/bash var="(\\]\$" echo $var # (\]$* echo "$var" # (\]$* echo '$var' IFS='\\' echo $var # ( ]$* echo "$var" # (\]$*12. 转意符 \
#!/bin/bash echo "\v\v" # \v\v echo -e "\v\v" # 垂直制表符号
13. 返回码 exit
脚本调用结束, 都会有一个返回值, 0表示成功,非0表示不成功, 返回值必须在0-255, 必须是整数. 不写的话等价 exit $?
14 if 测试命令返回, 也就是if command , command并非一定是[ ], [[ ]]. 同时[[ ]] 不一定非与if不可 如: [ 1 -ne 2 ] && echo "1 not eq 2"
# 非常有用的if-grep 结构 # if 测试命令返回值是不是true(0) if echo "aa" | grep -q test.txt then echo "aa contain" else echo "aa not contain" fi
if的嵌套
a=1 b=2 if $a if [[ $a < $b ]] then echo "a<b" else echo "x" fi then echo "y" fi
14. (( )) 算术扩展表达式, 如果表达式的结果未0则命令返回非0, 就是假。与命令退出码恰好相反, 参考13点
#!/bin/bash if (( 0 )) # false then echo "true" else echo "false" fi
15. 常用的测试符号
-n(-z) 测试变量是否存在(未定义或者是NULL)
-e 文件是否存在
-f 是否是否文件
f1 -nt f2 文件f1比文件f2新(-ot 比较旧)
字符串比较的时候,为了安全, 可以添加一个字符 如: [[ "x$a" == "x$b" ]]
例子:
#!/bin/bash # cat file NOARGS=65 NOTFOUDN=66 NOTGZIP=67 if [ $# -eq 0 ] then echo "Usage: basename $0 filename" exit $NOARGS fi filename=$1 if [ ! -f $filename ] then echo "$1 not found" exit $NOTFOUND fi if [ "${filename##*.}" != "txt" ] ## 变量替换 value##pattern 替换掉##前面的返回匹配的 then echo "$filename is not txt file" fi cat $filename | more exit $?
字符串查找,匹配,子串 ,正则处理bash都可以很好的处理
#!/bin/bash # length str="abcd" echo ${#str} # 4 echo `expr length $str` # 4 # match length str="12abcd23#?32" echo `expr match "$str" 12[a-z]*.23` # 8 # index echo `expr index "$str" cd` # 5 # substring echo `expr "${str:3}"` # bcd23#?23 echo `expr "${str:3:2}"` # bc
相关文章推荐
- Python下调用Linux的Shell命令
- wdcp的环境搭建shell脚本分析--install.sh
- zorka源码解读之通过beanshell进行插桩的流程
- zorka源码解读之Beanshell与zorka的交互实现
- Mac OS X10.9.5bash基本命令失效后的修复
- 一个发送电子邮件的bash脚本
- JAVA执行bat文件和shell脚本文件
- PowerShell批量修改AD用户密码属性
- PowerShell批量修改AD用户密码属性
- Powershell 批量替换文件
- Linux-shell基础-4
- Bash shell和变量详解
- 用PowerShell把东西pin到开始菜单上
- 三白话经典算法系列 Shell排序实现
- adb shell 命令详解
- PowerShell中实现人机交互
- PowerShell获得剪贴板上的数据
- shell学习二十三天----打印
- Linux Shell之变量
- shell学习二十二天----计算行数,字数以及字符数