Shell编程笔记

#!/bin/bash
echo "Hello World !"

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod u+x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php

使用变量

your_name="qinjx"
echo $your_name
echo ${your_name}
echo "I am good at ${your_name}Script"
readonly修饰为只读
unset 命令可以删除变量
unset variable_name

shell不支持浮点数,小数运算示例如下

1、借助bc处理示例:计算5.01-4*2.0,得到的结果为-2.99

1
2
$ c=$(echo "5.01-4*2.0"|bc)
echo $c

2、借助awk处理示例:计算7.01*5-4.01,得到的结果为31.05

1
2
$ c=$(awk 'BEGIN{print 7.01*5-4.01 }')
$ echo $c

注:在shell 中$() 与 ``等效。 中间包含命令语句执行,返回执行结果。

 

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

拼接字符串

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

获取字符串长度用#

string="abcd"
echo ${#string} #输出 4
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
string="runoob is a great company"
echo `expr index "$string" is`  # 查找is,输出 8。脚本中 "`" 是反引号,而不是单引号 "'"

数组

array_name=(value0 value1 value2 value3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

读取数组的值

valuen=${array_name[n]}

使用@符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}

截取字符串

1. # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:

 printf 

格式化输出

printf "%-10s %-8s %-4s
" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f
" 郭靖  66.1234

%s %c %d %f都是格式替代符

%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),

%-4.2f 指格式化为小数,其中.2指保留2位小数。

# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def

printf "%s
" abc def

printf "%s %s %s
" a b c d e f g h i j

流程控制

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

文件包含

#使用 . 号来引用test1.sh 文件
. ./test1.sh

# 或者使用以下包含文件代码
# source ./test1.sh
 


原文地址:https://www.cnblogs.com/lakeslove/p/7249543.html