shell笔记收藏
来源:互联网 发布:js 修改style属性 编辑:程序博客网 时间:2024/06/02 03:06
http://www.runoob.com/linux/linux-shell.html 教程地址
http://www.runoob.com/try/runcode.php?filename=helloworld&type=bash 在线编译器
笔记一:
如果不好理解的话,Shell 个人感觉可以对应成 win 中的 bat,通过代码来实现一些自动定时任务,自动备份或者执行的任务。
1、chmod +x file 加上执行权限,否则会提示无执行权限。
2、注意执行脚本时候或者全目录,或者 ./file.sh ,如果不加的话,linux 默认会从PATH 里去找该 file.sh。
3、看了这篇教程,发现脚本后缀名可以任意修改,仍然可以正常运行。
笔记二:
Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://www.aaa.com/123.htm
1. # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
笔记三:
%d %s %c %f 格式替代符详解:
d: Decimal 十进制整数 – 对应位置参数必须是十进制整数,否则报错!
s: String 字符串 – 对应位置参数必须是字符串或者字符型,否则报错!
c: Char 字符 – 对应位置参数必须是字符串或者字符型,否则报错!
f: Float 浮点 – 对应位置参数必须是数字型,否则报错!
如:其中最后一个参数是 “def”,%c 自动截取字符串的第一个字符作为结果输出。
$ printf "%d %s %c\n" 1 "abc" "def"1 abc d
笔记四:
$ command > file 2>&1$ command >> file 2>&1
这里的&没有固定的意思
放在>后面的&,表示重定向的目标不是一个文件,而是一个文件描述符,内置的文件描述符如下
1 => stdout2 => stderr0 => stdin
换言之 2>1 代表将stderr重定向到当前路径下文件名为1的regular file中,而2>&1代表将stderr重定向到文件描述符为1的文件(即/dev/stdout)中,这个文件就是stdout在file system中的映射
而&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同,都等价于
>file 2>&1
此处&>或者>&视作整体,分开没有单独的含义
顺序问题:
find /etc -name .bashrc > list 2>&1# 我想问为什么不能调下顺序,比如这样find /etc -name .bashrc 2>&1 > list
这个是从左到右有顺序的
第一种
xxx > list 2>&1
先将要输出到stdout的内容重定向到文件,此时文件list就是这个程序的stdout,再将stderr重定向到stdout,也就是文件list
第二种
xxx 2>&1 > list
先将要输出到stderr的内容重定向到stdout,此时会产生一个stdout的拷贝,作为程序的stderr,而程序原本要输出到stdout的内容,依然是对接在stdout原身上的,因此第二步重定向stdout,对stdout的拷贝不产生任何影响
一些简单的测试代码:
#!/bin/basharray_a=("aa" "bb" "cc" "dd")echo ${array_a[1]}echo ${array_a[@]}for i in "${array_a[@]}";doecho ${i}doneaaa="aaa bbb ccc ddd"echo `expr index "${aaa}" bbb`val=`expr 3+8`echo "两数之和为 : $val"val=`expr 3 + 8`echo "两数之和为 : $val"a=10b=20if [ ${a}==${b} ]thenecho "a等于b"fiif [ ${a}!=${b} ]thenecho "a不等于b"firead name echo "$name It is a test"echo `date`echo -e "\n"printf "\n"printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 a=5b=6result=$[a+b] # 注意等号两边不能有空格echo "result 为: ${result}"if test ${a} -ne ${b} thenecho "a不等于b"fia=10b=20if test $a -eq $b then echo "a 等于 b"elif test $a -gt $b then echo "a 大于 b"elif test $a -lt $b then echo "a 小于 b"else echo "没有符合的条件"fii=1;while(test ${i} -lt 6)do echo ${i} let i++donedemoFun(){ echo "first shell function!"}demoFunfunWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "两个数字分别为 ${1} 和 ${2} !" return $((${1}+${2}))}funWithReturn 3 6echo "输入的两个数字之和为 $? !"
- shell笔记收藏
- Shell常用收藏
- linux shell常用命令收藏
- shell小技巧收藏
- shell脚本收藏
- 云笔记收藏笔记
- Shell Sort 希尔排序 收藏
- 【转】收藏:shell目录管理
- 【收藏】经典shell十三问
- 一些收藏的shell命令
- shell学习网站网址收藏
- OSGI学习笔记收藏
- 笔记(Hook API) 收藏
- linux学习笔记 收藏
- OpenCV学习笔记 收藏
- JQuery 笔记 js收藏
- Cocos2dx笔记与收藏
- 收藏的笔记
- 奇异值分解(SVD) --- 几何意义
- Leetcode5. Longest Palindromic Substring
- 转发 VS重定向
- 智能指针不一定能杜绝内存泄漏
- hiho 1580 Matrix(dp 降维压缩)
- shell笔记收藏
- Spring JDBC-事务方法嵌套调用解读
- js判断浏览器与版本号
- 基于rem的移动端布局注意事项
- 移动架构02_UML类图
- 【C++】 标准运算符
- 在一个千万级的数据库查寻中,如何提高查询效率?
- IntelliJ idea在Spring配置无错误时,装配对象出现 Could not autowire. no beans of "XXX" type found
- querystring