我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……比如向脚本传递的第一个参数:$1,实例如下:
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
"Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
常用传参命令:a.传递到脚本的参数个数:$#; b.遍历所以参数:$*,如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 c.脚本运行的当前进程ID号:$$ d.与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 e.$- 显示Shell使用的当前选项,与set命令功能相同: f.显示最后命令的退出状态:$?,其中0表示没有错误,否则其他值都有错误。
$* 与 $@ 区别:都是引用所有参数。只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
在为shell脚本传递的参数中如果包含空格,应该使用单引号或者双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。中括号 [] 与其中间的代码应该有空格隔开
1.查看后台进程 ps -ef | grep xxx kill -9 xxx
2.后台运行 并打印日志 nonup sh xxx.sh > xxx.log &
3. 2>&1 2> 表示stderr标准错误,& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
4. ll -t 是降序, ll -t | tac 是升序 ,,,,,,按时间排序:ll -rt
5.查看当前目录:pwd
==========================================================================================
grep常用实例
1.查找指定进程: ps -ef | grep xxx 查找指定进程个数: ps -ef | grep xxx -c 或 ps -ef | grep -c xxx
2.从文件中读取关键词进行搜索: cat test.txt | grep -f test2.txt 这个是查看test.txt中含有test2.txt中的类容,若要查看行号,加-n
3.从文件中查找关键词: grep -nf 'linux' test1.txt test2.txt
4.找出以's'开头的行内容:cat test.txt | grep ^s 不以s开头: cat test.txt | grep ^[^s] 输出以's' 结尾的: >>>>>>cat test.txt |grep s$
5.找出包含某些字符的,注意这个不是某个关键字,比3范围大:>>>>>>>>>> cat test.txt grep -E "ssss|ffff"
6.rm -rf `ls | grep -v *dmp_bird_seeds_cost_mm*` 反向删除
6.使用-v参数输出不包含指定模式的行
7.-r 参数递归地查找特定模式
============================================================================================
cp:复制命令,mv命令
1.复制单个文件到目标目录,文件在目标文件中不存在: >>>>>>>> cp test.txt /etc
2.复制整个目录: >>>>>>> cp -a test3 test5 其中 -a 是 all
3.mv [选项] 源文件或目录 目标文件或目录
4.mv 参数:-b:若需覆盖文件,则覆盖前先行备份
-f:强制覆盖
-t:指定目标目录
5.文件重命名:>>>>>>> mv test.txt test.log
6. 将文件log1.txt,log2.txt,log3.txt移动到目录test3中>>>>>>mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt
7.移动当前文件夹下的所有文件到上一级目录 >>>>> mv * ../
8.把当前目录的一个子目录里的文件移动到另一个子目录里>>>>>> mv dir1/* dir2
9:如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中 >>>> mv dir1 dir2
====================================================
touch命令的使用
1.使用格式; >>>>>>touch [选项]... 文件...
2.touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。
3.创建不存在的文件: >>>>>touch new.txt
4.更新log.log的时间和log2012.log时间戳相同 >>>>touch -r log.log log2012.log
5.更改文件时间戳:>>>>>>> touch -t 201211142234.50 test.txt 其中-t 为time
==================================
mkdir rm 创建,删除命令的使用
1.命令格式: >>>>>mkdir [选项] 目录...
2.创建一个目录 :>>>>>>>>>mkdir dir1
3.递归创建多个目录 :>>>>>> mkdir -p test2/test22
3.创建权限为777的目录 :>>> mkdir -m 777 dir1
5.不提示强制删除文件:>>>>>> rm -f test.txt
6.递归删除目录及目录下面所有文件 :>>>>>>>> rm -r dir1
===================================================================
cat,more,nl 查看文件的使用
1.nl 可以将输出的文件内容自动的加上行号,比cat -n 会自动补齐,
2.空行也算行:>>>>>> nl -b a test.log
3.从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出 :>>>>>> more +/day3 log2012.log
4.从第100行开始预览:>>>>> more +100 2018.log
5.列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来 >>>ls -l | more -5
6.将几个文件合并为一个文件:cat file1 file2 > file