Shell脚本学习笔记

参考C语言中文网的shell学习教程,总结shell脚本一些常用的语法与其他语言的区别:

1.变量

  varname="hello"   #变量名和等号之间不能有空格,等号和变量名之间也不能有空格。

  变量使用两种方式:

    echo $varname

    echo ${varname} (推荐)

    readonly varname #设置变量为只读

    unset varname(或者function) 删除变量或者方法

    特殊变量

      

变量含义
$0当前脚本的文件名
$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#传递给脚本或函数的参数个数。
$*传递给脚本或函数的所有参数。
$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?上个命令的退出状态,或函数的返回值。
$$当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

2.替换

a=1
echo -e "Value of a is $a \n"
打印出的是:
Value of a is 1
echo "Value of a is $a \n"
打印出的是:
Value of a is 1 \n
转意字符有: 
  
    
    
转义字符含义
\\反斜杠
\a警报,响铃
\b退格(删除键)
\f换页(FF),将当前位置移到下页开头
\n换行
\r回车
\t水平制表符(tab键) 
\v垂直制表符
可以使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。
命令转换:

DATE=`date`   ##符号是esc下面的键

echo "Date is $DATE"

可以使用的变量替换形式:

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。
具体效果自己操作下。

3.运算符

一般使用expr进行运算

val=`expr 2 + 2`   注意中间的空格 ,2和+之间空格隔开

echo "Total value : $val"


算术运算符列表
运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 10。
*乘法`expr $a \* $b` 结果为  200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。
表达式格式if  [ $a == $b ]  ,注意空格。


关系运算符列表
运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 true。
-ne检测两个数是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。


布尔运算符列表
运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。


字符串运算符列表
运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -z $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。


文件测试运算符列表
操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ] 返回 false。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ] 返回 false。
-p file检测文件是否是具名管道,如果是,则返回 true。[ -p $file ] 返回 false。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。[ -u $file ] 返回 false。
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ] 返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true。


4.字符串

字符串的可以是加单引号(串中不允许加单双引号,转移字符也无效)、双引号或者不加,建议加双引号

获取长度:

  string="abcd"

  echo ${#string} #输出 4   

 提取子串:

  string="alibaba is a great company"

  echo ${string:1:4} #输出liba

5.数组

下标必须大于=0,使用

arr=(value0 value1 value2 value3)中间是空格

或者arr[0]=value0 ,arr[1] ........

访问:${array_name[index]}  其中index如果为*或者@即访问所有的元素

6.控制语句

if ... fi 语句;

if ... else ... fi 语句;

if ... elif ... else ... fi 语句


case 值 in
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done

while command
do
   Statement(s) to be executed if command is true
done

until command
do
   Statement(s) to be executed until command is true
done

7.重定向

$ command > file
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
全部可用的重定向命令列表
命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。
重定向输出中 >会覆盖之前的写入,>>则可以在后面添加,不删除之前的写入


8.引入脚本

  两种方式:

    1). filename

    2) source filename

9.tar命令

  分为两部分:

   -f 是通配都可以使用,表示使用压缩文件或设备

   -t 列出包的内容

  一是:压缩

    -c 创建新的包

    -r 为包添加新的文件

    -u 更新包中的文件

   例子:

    tar -cf test.tar *.db  #将当前目录的所有.db结尾的文件压缩到test.tar

    tar -tf test.tar #列出test.tar的所有文件

    tar -rf test.tar log* #将log*的文件添加进test.tar

    tar -uf test.tar test.txt #将更新test.txt文件,如果没有直接添加,所以-u 可以完全替代-r

  二是:解压

    tar -xvf test.jar #解压非gzip格式压缩包

    tar -zxvf test.jar #解压非gzip格式压缩包

    经过以上tar命令压缩后的文件(只是把文件放在一起,未压缩)还是非gzip的压缩包,不能使用-z否则报错,需要执行gzip test.jar后才是gzip压缩包。

    通过gzip -d test.jar.gz可以还原到test.jar.

    -x 表示解压缩

   -v生成解压缩过程的状态信息

10.其他

wc -l命令:列出行数



参考教程:http://c.biancheng.net/cpp/view/2740.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值