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

【Shell脚本攻略】-基础入门

2017-11-28 16:57 639 查看
1.什么是shell

shell从根本上是一个命令解析器,接收用户的简单命令,送到内核去调用Linux封装好的程序执行。

shell脚本是一个以#!(shebang)开头的文件:#!/bin/bash,/bin/bash是bash解释器命令路径。shell脚本运行方式有两种:

(1)- bash scripts.sh# 将脚本作为命令行参数(可舍去shebang)

(2)- chmod a+x scripts.sh;- ./scripts.sh# 赋予可执行权限(内核读取shebang,并执行:/bin/bash scripts.sh)

2.基本语法

(1) 输出

echo "hello world";  echo 'hello world';  echo hello world

引号的作用:双引号需转义叹号;单引号不能使用变量替换;无引号不能显示分号

printf "%-5s %-10s %-4s\n" No Name Mark

%-5:左对齐宽度为5;%5:右对齐宽度为5;

%s—字符串;%c—字符;%d—十进制;%f—浮点数

(2) 变量

定义:a=1;

使用:$a;

获得字符串长度:length=${#var}# 含义为:echo $var | bc

识别当前shell:$SHELL、$0

(3) 算数/逻辑运算

整数:

let a=b+c;  

a=$[ b + c ]

a=$(( b + c ))

a=$(expr $b + $c )

a=`expr $b + $c`

浮点数:# 反引号``执行了语句并获得返回值;bc命令是用于数学计算的高级命令

a=`echo "$b * $c" | bc`

a=`echo "scale=2;$b/$c"`

a=`echo "obase=2;ibase=10;$no"`# 进行了进制转换

逻辑运算:

-gt:大于;-lt:小于;-ge:大于或等于;-le:小于或等于;-ne:不等于

(4) 文件重定向

shell可将输出的内容重定向到文件,存储起来

0——stdin——标准输入;1——stdout——标准输出;2——stderr——标准错误

echo "hello world" > stdout.txt    # 重定向文本,等同于1>

echo "hello world"2> stderr.txt     # 重定向错误

echo "hello world"2>&1 std.txt     # 重定向本文和错误

echo "hello world"&> std.txt         # 重定向本文和错误

echo "hello world">> atdout.txt    # 追加文本

(5) 数组

shell里面的数组支持字符串作为索引,即关联数组

定义数组:arr=(1 2 3 4 5)

单个赋值:arr[0]="test1";arr[1]="test2"

打印数组元素:echo ${arr[0]}    |    echo ${arr[$index]}    |    echo ${arr[*]}  # 打印所有元素

打印数组长度:echo ${#arr[*]}

定义关联数组:

declare -A arr

arr=([index1]=val1 [index2]=val2)

arr[index1]=val1

(6) 过滤器与管道

命令称作过滤器,管道连接多个命令:cmd1 | cmd2 | cmd3

定义子shell:cmd1;(cmd2);cmd3        # 括号中的命令执行时,不会对当前有任何影响

(7) 调试相关

别名定义:alias install='sudo apt-get install'

获取日期:date; date +%s; date "+%d %B %Y"

设置日期:date -s XXX; 执行时间:start=date +%s; end=date +%s  | time<scriptpath>

set -x    # 打印出执行的每一行及当前状态

set +x   # 禁止调试

set -v    # 当命令进行读取时显示输入

set +v   # 禁止打印输入

读取n个字符存入变量:read -n 2 var

特定时间内读取:read -t 2 var

特定定界符作为输入结束:read -d “;” var

显示提示信息:read -p "Enter"

无回显显示密码:read -s var

运行命令直至成功:repeat(){}

(8) 空格

- 等号赋值两边不能有空格

- 命令与选项之间需要空格

- 管道两边空格可有可无
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: