1.外部参数:
./script argument
eg:
cat show.sh
#!/bin/bash
echo $1
./show.sh file1.txt
第一个参数 : $1,第二个参数 : $2
eg:脚本复制文件(arg1) 到目标地址(arg2)
cat copy.sh
#!/bin/bash
cp $1 $2
./copy.sh file1.txt /tmp/
得到参数个数: $#
脚本中获取脚本名称: $0
获取文件的第一行:head-1
获取文件的最后一行: tail-1
获取一个文件每一行的第三个元素: awk'{print $3}'
文件中每行第一个元素是 FIND,获取第二个元素: awk'{ if ($1 == "FIND") print $2}'
2.在shell脚本,我们可以使用两种类型的变量:
-
系统定义变量
-
用户定义变量
系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。
用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>
”查看。
定义:
变量名=变量值 注意:"="左右不能有空格。
eg:
x=123
x="$x"456
x=${x}789
当echo $x时输出123456789
调试 bash 脚本 ,查看所有变量情况
sh -x run.sh
3.检查文件系统中是否存在某个文件
if [ -f /opt/log/messages ]
then
echo "File exists"
fi
注: 判断方括号前后都要有空格
5.在后台运行脚本
后台运行 在命令后加 &
不挂断运行 nohup command&
6.[ $a == $b ]
和 [ $a -eq $b ]
区别
[ $a == $b ] - 用于字符串比较
[ $a -eq $b ] - 用于数字比较
7.test、[ ] 和 [[ ]]
s=""
if [ -z ${s} ]
then
echo "empty"
fi
if [[ -z ${s} ]]
then
echo "empty"
fi
if test -z ${s}
then
echo "empty"
fi
事实上,if后的[ ]、[[ ]]、test命令都是可以单独执行的,而根据if的判断原理,后续执行哪个分支也是由[ ]、[[ ]]、test的返回值来决定的。
8.&& 和 ||
8.将标准输出和错误输出同时重定向到同一位置
方法一:
2>&1 (# ls /usr/share/doc > out.txt 2>&1 )
方法二:
&> (# ls /usr/share/doc &> out.txt )
重定向方式一览表
9.shell脚本中“$?”标记
$?
为shell内置变量,用于存放上一个命令的返回码 ,如果为0则执行成功。
10.将命令执行结果存入变量
``与$( )
LINE_CNT=`wc -l t.txt`
LINE_CNT=$(wc -l t.txt)
注:``和$( )都只将命令行标准输出的内容存入变量,如果需要将标准错误内容存入变量,需要用到重定向。
11.换行符处理
如果命令执行结果有多行内容,存入变量并打印时换行符会丢失:
[work@REC-59-3 ~]# cat test.txt
a
b
c
[work@REC-59-3 ~]# CONTENT=`cat test.txt`
[work@REC-59-3 ~]# echo ${CONTENT}
a b c
若需要保留换行符,则在打印时必须加上"":
[work@REC-59-3 ~]# CONTENT=`cat test.txt`
[work@REC-59-3 ~]# echo "${CONTENT}"
a
b
c
12.Linux中cut命令
'cut’是一个很有用的Linux命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。
-b:仅显示行中指定直接范围的内容;
-c:仅显示行中指定范围的字符;
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
-n:与“-b”选项连用,不分割多字节字符;
13.循环
#for循环:
#!/bin/bash
for var in list;
do
commands
done
#while循环:
while command;
do
commands
done
#until循环
until command;
do
commnds
done