工作中Shell的常用问题

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值