linux Bash脚本基础符号总结 (一)

  1.初识Bash

  首先编译一个简单的bash 

vim hello.sh

  使用vim编辑hello.sh ,输入如下代码并保存:

#!/bin/bash
echo hello word

  运行Bash脚本的方式:

# 使用shell来执行
$ sh hello.sh
# 使用bash来执行
$ bash hello.sh

  还可以让脚本本身就具有可执行权限,通过chmod命令可以修改:

# 赋予脚本的所有者该执行权限,允许该用户执行该脚本
$ chmod u+x hello.sh
# 执行命令,这将使用脚本第一行指定的shell来执行,如果指定shell不存在,将使用系统默认shell来执行
$  ./hello.sh

 2.bash特殊符号

  2.1 # 注释(#!除外)

    #!是用于指定当前脚本的解释器,我们这里为bash,且应该指明完整路径,所以为/bin/bash 

#!/bin/bash

 echo "The # here does not begin a comment."
 echo 'The # here does not begin a comment.'
 echo The \# here does not begin a comment.
 echo The # 这里开始一个注释

 echo ${PATH#*:}         # 参数替换,不是一个注释
 echo $(( 2#101011 ))   # 数制转换(使用二进制表示),不是一个注释

  2.2 ;分号(使用分号(;)可以在同一行上写两个或两个以上的命令。)   

 #!/bin/bash
 echo hello; echo there
 filename=ttt.sh
 if [ -r "$filename" ]; then    # 注意: "if""then"需要分隔
     echo "File $filename exists."; cp $filename $filename.bak
 else
     echo "File $filename not found."; touch $filename
 fi; echo "File test complete."

  2.3终止case选项(双分号)

 #!/bin/bash

 varname=b

 case "$varname" in
     [a-z]) echo "abc";;
     [0-9]) echo "123";;
 esac

  2.4点号 . 等价于 source

$ source test.sh
Hello World
$ . test.sh
Hello World

  2.5 引号

    2.5.1  双引号(")  "STRING" 将会阻止(解释)STRING中大部分特殊的字符

     2.5.2  单引号(') 'STRING' 将会阻止STRING中所有特殊字符的解释,这是一种比使用"更强烈的形式。

  2.6斜线和反斜线

    2.6.1 斜线(/) 文件名路径分隔符。分隔文件名不同的部分(如/home/bozo/projects/Makefile)。也可以用来作为除法算术操作符。

     2.6.2 反斜线(\) 一种对单字符的引用机制。\X 将会“转义”字符X。这等价于"X",也等价于'X'。\ 通常用来转义双引号(")和单引号('),这样双引号和单引号就不会被解释成特殊含义了。

  2.7反引号 (`)  

$ cp `mkdir back` test.sh back
$ ls

  2.8 冒号(:)

    2.8.1 空冒号 等价于“NOP”(no op,一个什么也不干的命令)。也可以被认为与shell的内建命令true作用相同。

#!/bin/bash

while :
do
    echo "endless loop"
done

  等价于:

#!/bin/bash

while true
do
    echo "endless loop"
done

可以在 if/then 中作占位符:

#!/bin/bash

condition=5

if [ $condition -gt 0 ]
then :   # 什么都不做,退出分支
else
    echo "$condition"
fi

    2.8.2 变量扩展/子串替换

      2.8.2.1 在与>重定向操作符结合使用时,将会把一个文件清空,但是并不会修改这个文件的权限。如果之前这个文件并不存在,那么就创建这个文件。

$ : > test.sh   # 文件“test.sh”现在被清空了
 # 与 cat /dev/null > test.sh 的作用相同
 # 然而,这并不会产生一个新的进程, 因为“:”是一个内建命令

      2.8.2.2 ":"还用来在 /etc/passwd 和 $PATH 变量中做分隔符.

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games
$

  2.9 问号(?)

  在一个双括号结构中,? 就是C语言的三元操作符

 #!/bin/bash

 a=10
 (( t=a<50?8:9 ))
 echo $t

  2.10 美元符号($)

    2.10.1 变量替换

#!/bin/bash

var1=5
var2=23skidoo

echo $var1     # 5
echo $var2     # 23skidoo

转载于:https://www.cnblogs.com/eagel/p/4877883.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值