您的位置:首页 > 运维架构 > Shell

shell脚本攻略第一章总结

2015-12-20 20:43 656 查看
1、如果需要打印!,不能将其放入双引号中,有三种方式:

    echo  Hello world !

   或者

    echo  'hello world  !'

   或者

    echo "Hello world \!"

2、printf格式化字符串,还可以指定字符串的宽度、左右对齐方式等。在默认情况下,printf并不像echo命令那样会自动添加换行符,我们必须在需要的时候手动添加。如:

     printf   “%-5d  %-10s  %-4.3f\n”  1   sarch  80.12345

 解释:

%c、%d、%s和%f都是格式化字符串,-表示左对齐,默认是右对齐方式;.3指定保留2个小数位。

3、echo -n来忽略结尾的换行符。如果需要使用转义序列,则采用echo -e “包含转义序列的字符串”,如:

    echo   -e “1\t2\t3”

输出:1 2 3

4、彩色打印输出:

   echo -e “\e[1;31m This is red text \e[0m”

文本对应的颜色码:重置=0、黑色=30、红色=31、绿色=32、黄色=33、蓝色=34、青色=36、洋红=35、白色=37.

背景对应的颜色码:重置=0、黑色=40、红色=41、绿色=42、黄色=43、蓝色=44、青色=46、洋红=45、白色=47.

5、获得字符串长度:length=$(#var)

6、基本的算数操作:

    let   、(())、[]和expr

如;result=`expr 3 + 4`

let "var+=1" 或 let var+=1 这种写法运算符间不能有空格


    bc是高级运算工具:echo ”4 *  0.56“ |bc

    设定小数精度。

    参数使用scale 如:echo "scale=2;3/8" |bc

    进度转换

   参数使用obase

平方根 sqrt()

平方^

7、标准输入输出

0-------标准输入 

1-------标准输出     1>(>>) filename

2------标准错误输出  2>(>>)filename

1和2一起用: cmd   >>filename  2>$1

tee既可以将数据重定向到文件,也可以提供一份重定向数据的副本作为后续命令的输入;

8、数组是shell脚本中非常重要的组成部分,它借助索引将多个独立的数据存储为一个集合。

    shell中数组用小括号定义:array_var=(1 2 3 4 5 6)

打印数组中所有值:echo  ${array_var[*]

或echo ${array_var[@]}

打印数组长度

echo ${#array_var[*]}

定义一个数组;declare  -A  array_var;

列出数组索引:echo ${!array_var[*]}

9、别名alias

$@-----表示所有脚本参数的内容;

$#-----表示所有脚本参数的个数;

10、获取终端信息

tput和stty是两款终端处理工具。

获取终端的行数和列数;

tput cols  列数

tput  lines 行数

打印当前终端名:

tput longname

设置终端背景色

tput setb n)     n可以在0-7之间取值

设置文本颜色

tput setf  n)     n可以在0-7之间取值

删除从当前光标位置到行尾的所有内容;

tput  ed)----用在脚本中

11、date命令

date  -d  @秒数   可以换成时间

用格式串结合 + 作为date命令的参数,可以按照你的选择打印出对应的格式的日期

date  ”+%d %B %Y“

设置日期和时间

date  -s  ”格式化的日期字符串“

在脚本中生成延时

#!/bin/bash

echo  -n Count:

tput  sc(存储光标位置)

count=0;

while  true;

do

  if  [ $count -lt 40 ]

     then

              let count++

              sleep 1

              tput rc(恢复光标位置)

              tput ed

              echo -n $count

   else

           exit 0

   fi

done

11、使用-x,启用shell脚本的调试功能

bash  -x   shell.sh

#!/bin/bash 改成#!/bin/bash  -xv,不用任何其他选项就可以启用调试功能了。

12、定义函数

   function   fname()

  {

      statements;

 }

或者

fname()

 {

      statements;

 }

调用函数

fname;

参数传递

fname arg1  arg2;

递归函数

fork炸弹

:(){ :|:& };:

导出函数

export  -f  fname

$?----给出命令cmd 的返回值。成功为0,否则为非0

echo输出格式不变:

out=$(cat filename)

echo "$out"

13、read

read  -s  var 用无显得方式读取密码

read  -p "Enter input:"  var  显示提示信息,并赋值给变量var

在特定时间内读取输入

read   -t  秒值  var

用特定的定界符作为输入行的结束;

read  -d  ":"  var

14、IFS--内部字段分隔符,是存储定界符的环境变量,是当前shell环境变量使用的默认定界符字符串。

IFS=","---表示用逗号隔开

例子:

data=”a,b,c,d“

IFS=, 

for item  in $data

do

     echo item: $item

done

IFS=$oldIFS

15、for循环

for   var  in  list(可以是字符串,也可以列表)

do

     commands

done

{1..50}--表示生成一个1——50的数字列表

16、if语句

if  condition

   then

         commands

   else  if  condition

     then

              commands

 else

   commands

fi

文件系统相关测试

[  -f $file-var ] 如果给定的变量包含正常的文件路径或文件名,则返回真。

[   -x $var  ] 如果给定的变量包含的文件可执行,则返回真。

[  -d  $var  ]如果给定的变量包含的是目录,则返回真。

[  -e  $var  ] 如果给定的变量包含的文件存在,则返回真。

[  -c  $var  ] 如果给定的变量包含的是一个字符设备文件的路径,则返回真。

[  -b  $var  ] 如果给定的变量包含的是一个块设备文件的路径,则返回真。

[ -w $var  ]可写,则返回真。

[  -r  $var  ]可读,则返回真

[  -L  $var ] 是符号链接文件,则返回真。

[[ -z $var ]] :如果var包含的是空字符串,则为真;

[[ -n $var ]] :如果var包含的是非空字符串,则为真。

17、逻辑运算符:  &&   ||   !

test可以用来执行条件检测

如:

if  [  $var  -eq   0  ] ;then   echo "True";fi

--->

if  test  $var -eq  0 ;then echo "True";fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: