1、第一行要写明shell种类

#!/bin/bash
 
2、打印输出
#!/bin/bash
echo "Hello World !~"
 
3、变量定义
  • 变量=前后不能有空格,字符串要用“或‘ 或  不用
  • 变量是若定义的,不定义也可使用,既:值为空
  • 变量可以用 { } 括起来,明确变量名称的范围
#!
echo $v_name
echo ${v_name}_good
echo $v_id
echo $null
 
.

 
  • 变量替换
a=${b:-0}如果b为空值,则用0代替b赋给a;b有值则不再作任何替换
x=${1:-0}用户没有输入参数,则用0代替$1
  • 变量截取
a=1234567
echo ${a:3}4567从第三个字符开始到最后
echo ${a:3:2}45从第三个字符开始截取两个
echo ${a#*3}从任意字符开始直到截取到3123
echo ${#a}7变量的字符数
 
 
4、字符串,变量定义,单引号和双引号的区别
  • 使用双引号的变量,可以调用变量,也可以使用转义符 '\'
#!/bin/bash
v_name="LiKun"
v_id="${v_name}_aa"
echo $v_name
echo $v_id
 
./test.sh 
LiKun
LiKun_aa
 
  • 单引号字符串的限制:
  1. 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  2. 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
#!/bin/bash
v_name="LiKun"
v_id="${v_name}_aa"
echo $v_name
echo $v_id
 
./test.sh 
LiKun
${v_name}_aa
 
  • 字符串的长度和截取:
#!:}
 
.
Kun
 
 
5、注释
#
如果大段的注释,可以用大括号括起来,形成一个函数,没人调用函数就相当于注释了
 
 
6、数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。下标由0开始编号。下标可以是整数或算术表达式,其值应大于或等于0。
*注意元素间间隔为‘空格’
]}                        #输出数据单个元素
]}
]}
]}
echo ${array_name[@]}                        #输出数组所有元素    ,@也可用*
echo ${#array_name[@]}                       #输出数组长度
 
.
 
 
7、变量比较
  • 数值测试(以下参数只能判断数值类型)
参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
num2
if $num1 -eq $num2 ]
then
        echo "这两个值相等"
else 
        echo "这两个值不相等"
fi
 
./test.sh 
这两个值不相等
 
 
  • 字符串测试
参数 说明
== 等于则为真
!= 不相等则为真
-z 字符串 字符串长度伪则为真
-n 字符串 字符串长度不伪则为真
! [ abc == 123 ]                [  ! abc == 123 ]        取反
[ abc == 123 -a xyz == xyz]与
[ abc == 123 -o xyz == xyz]或
 
#!/bin/bash                            #判断字符串相等
num1="aaa"
num2="bbb"
if [ "$num1" == "$num2" ]             #注意此处【】和=前后要留有空格
then
        echo "这两个值相等"
else
        echo "这两个值不相等"
fi
./test.sh 
这两个值不相等
 
#!/bin/bash                    # -z 判断如果为空,为真;不为空,为假
num1="aaa"
if [ -z "$num1" ]             #注意此处【】和=前后要留有空格
then
        echo "这个字符串为空"
else
        echo "这个字符串有值"
fi
./test.sh 
这个字符串有值
 
#!/bin/bash                    # -n 判断如果不为空,为真;
num1="aaa"
if [ -n "$num1" ]             #注意此处【】和=前后要留有空格
then
        echo "这个字符串有值"
else
        echo "这个字符串为空"
fi
./test.sh 
这个字符串有值
 
  • 文件测试
参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
#!/bin/bash
cd /bin
if [ -e ./bash ]
then
    echo 'The file already exists!'
else
    echo 'The file does not exists!'
fi
 
./test.sh 
The file already exists!
 
  • (($a==$b))   数值之间的比较
b
(($a==$b))
echo $?
 
7、运算
  • 计算器
    echo $[8+9]$((8+9))expr 8 + 9echo 10/3 | bc -l
    echo "scale=3; 10/3" | bc -l指定小数点后保留3位

语法:

((表达式1,表达式2…))

特点:

1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。

2、在双括号结构中,所有变量可以不加入:“$”符号前缀。

3、双括号可以进行逻辑运算,四则运算

4、双括号结构 扩展了for,while , if条件测试运算

5、支持多个表达式运算,各个表达式之间用“,”分开

));
))
echo $a

((a++))
echo $a

 
((a++,b++))
echo $a,$b
 
.

6,3
 
  • 扩展逻辑运算
;
b));                #真返回8,假返回9
  
((b))
err2
ok
 
7、if else 分支判断
语法:
if [] then
   xxx
elif [] then
  xxx
else xxx
fi
#!/bin/bash
num1=1
num2=2
if [ $num1 -eq $num2 ]
then
        echo "相等"
elif  elif ((num1>num2))        #  比较的另一种写法,推荐  > < ==    if (($(($i%500))==0))
then    
        echo "大于"
else  
        echo "小于"
fi
 
./test.sh 
小于
 
 
8、case in  条件分支
取值后面必须为单词in,每一模式必须以   )    结束。取值可以为变量或常数,以   ;;    结束分支。
每个分支可有多个命令
单个分支有多个值,中间用  |  分割,如:2|3
)  )  )  )  echo 'You select 4'
    ;;
    *)  echo 'You do not select a number between 1 to 4'
    ;;
esac
 
.
Good
 
9、for 循环语句
do
    echo "The value is: $i"
done
 
.
The value is
The value is
The value is
The value is
 
 
#!/bin/bash                # in 为字符串
for i in 'str 1' 'str 2' 'str 3'
do
    echo "The value is: $i"
done
 
.
The value is
The value is
 
;
total;
;i<=num;i++))            #  循环控制
do
    ((total+=i))
done
echo $total 
.
 
10、while 循环语句
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 5 ]            #或者   ((COUNTER<5))
do
    COUNTER=$[COUNTER+1]            #或者写成     COUNTER=$((COUNTER+1))
    echo $COUNTER
done
 
.

 
11、break continue
break命令允许跳出所有循环(终止执行后面的所有循环)。
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
 
12、函数
#!/bin/bash
demoFun(){
    echo "This is your first shell function!"
}
echo "Function begin..."
demoFun
echo "Function end!"
 
./test.sh 
Function begin...
This is your first shell function!
Function end!
 
    bNum
    return $(($aNum+$bNum))
}
funWithReturn
echo "$?"
 
.
 
#!
.
The value of the second parameter is !
 
13、位置参数
参数处理 说明
$# 参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$n 第n个参数
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$0 进程名或文件名
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 
       
        echo $$
        echo $#
        echo $?
.

.

特殊:
##*.}            #    ‘##’意思是把$1参数,接去掉.前面的(包括. ,并截取到最后一个)
 
[oracle@lk1 shell]$ ..sh  aa.bb
bb
[oracle@lk1 shell]$ ..sh  aa.bb.cc
cc
 
 
 
$@和$*的区别:
#!/bin/bash
for i in  "$*"
do      
          echo $i
done    
for i in "$@" 
do      
          echo $i
done

.

 
 
14、反引号 ` 
file `which passwd`
$()相当于``
file $(which passwd)
 
15、交互输入
#!/bin/bash                            
read  -p "please: "  -s  -n 1 a
echo you input: $a
-p:输入前提示
-s:输入内容不显示
-n 1:输入1个字符后即结束输入
 
16、文件处理
[root@likun python_scripts]# cat 1hello.py | while read line ;do echo '--->'$line;done
--->#!/usr/bin/python
--->'''print 'hello!'
--->print "what's your name?"'''
--->n='''good morning
--->everyone,
--->come on !'''
--->print n
 

shell基本语法备忘的更多相关文章

  1. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  2. SASS语法备忘

    sass语法 关于sass 3.3.0更新说明——3.3.0 sublime相关插件为:scss语法高亮,sass语法高亮,编译,保存即编译,格式化 文件后缀名 sass有两种后缀名文件:一种后缀名为 ...

  3. Markdown语法备忘

    标题 标题 标题是每篇文章都需要也是最常用的格式,在 Markdown 中,如果一段文字被定义为标题,只要在这段文字前加 # 号即可. # 一级标题 ## 二级标题 ### 三级标题 以此类推,总共六 ...

  4. LESS语法备忘

    变量 很容易理解: @nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light-blue; } 输出: # ...

  5. 常用Shell脚本命令(备忘)

    此处纪录一些个人常用的Shell命令,留作复用 Linux 必备软件 Tmux 终端复用神器 zsh 无比强大Shell运行环境 oh my zsh 搭配zsh食用 uGet Linux下载工具 Do ...

  6. markdown 语法备忘

    markdwon语法, 增加以下CSS代码,可以对markdwon语法产生的文件进行分页操作. <div style="page-break-after:always;"&g ...

  7. [学习笔记] Markdown语法备忘

    Markdown语法总结 标题 # 这是一级标题 ## 这是二级标题 ### 这是三级标题 #### 这是四级标题 ##### 这是五级标题 ###### 这是六级标题 注意#后面要加空格 字体 ** ...

  8. C++语法备忘

    记录一些C++的语法方便日后查看. 1.C++初始化语法 C++中新增加了两种初始化语法,其中大括号初始化器需要C++11以上的实现,使用时可以加等号,也可以不加,而且大括号中可以不包含任何东西,这种 ...

  9. PowerShell 语法备忘

    1.挡可能出现 .0 的时候需要加上引号 2.使用 -Join 或者 + 进行字符串拼接 3.在cmd 命令下可以使用 set /a  s=1+2  表示需要进行计算,而不是拼接

随机推荐

  1. 【WCF】Silverlight+wcf+自定义用户名密码验证

    本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情 ...

  2. javaSE第三天

    第三天    12 1:运算符(掌握)    12 (1)算术运算符    12 (2)赋值运算符    12 (3)比较运算符    13 (4)逻辑运算符    13 (5)位运算符(了解)    ...

  3. .NET中的IO操作之文件流

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  4. url中文参数解决方案

    首先,弄清楚为什么url传递中文会转码或者乱码,以及http头 contentType="text/html; charset=GBK" 的作用. html代码会经过web服务器, ...

  5. LoadCursor 函数

    从可执行文件中载入指定的光标资源,加载到指定的应用实例中 ? 1 2 3 4 5 HCURSOR WINAPI LoadCursor(    _In_opt_ HINSTANCE hInstance, ...

  6. Overview Of Portal Registry And Content References

     Portal Registry Each portal is defined by a portal registry.A portal registry has a tree-like struc ...

  7. 常见的HTTP错误总结

    一般来说HTTP2XX,代表请求正常完成,HTTP3XX代表网站重定向,HTTP4XX,代表客户端出现错误,HTTP5XX,代服务器端出现了错误 HTTP301:请求的数据具有新的位置 HTTP302 ...

  8. phpQuery采集微信公众号文章乱码

    终于找到解决方案了,这是一个值得庆祝的事情.... 原来是因为微信在源码中加入了防采集代码<!--headTrap<body></body><head>< ...

  9. php 安装redis扩展

    大家可以去http://code.google.com/p/redis/downloads/list这个地址找最近的下载wget http://redis.googlecode.com/files/r ...

  10. 自定义Toast的显示效果

    Activity: package com.example.editortoast; import android.app.Activity; import android.os.Bundle; im ...