Shell编程

编写shell脚本步骤
1、创建脚本
touch/vim 文件名.sh //必须以sh结尾
2、编写代码  
#!/bin/bash //第一行指定shell解释器,第二行开始写脚本
3、添加文件可执行权限
chmod +x 文件名
4、执行脚本:
①/bin/bash 文件
②./文件

注释:#   
案例:输出Hello World!

shell基础
变量的定义和使用
输入/输出
流程控制
函数
运算符
文件包含

  • 变量的定义和使用

定义变量 (变量名=值)

例如:str="value"
使用变量
①变量名前+'$'
例如:echo $str
②变量后紧跟字符时使用${str}
例如:echo "str的值为${str}."

变量命名规范
①变量名等号左右不能有空格(不同于其他编程语言)
②命名只能使用英文字母、数字、下划线,首字母不能以数字开头,中间不能有空格
③不能使用bash保留关键词(通过help查看保留关键字)  

只读变量
语法:readonly 变量名

位置变量(shell脚本附带选项)
传递:./test.sh a b c
接收:$+选项对应的序号(传递的参数从左到右,从0开始)
即$0表示./test,$1表示a,$2表示b,$3表示c

其他位置变量
$*:包含参数列表
$@:包含参数列表
$#:包含参数个数   

删除变量
语法:unset 变量名

定义字符串
str='Hellow World'

获取字符串长度
语法:$[#str]

截取字符串
语法:$[str:0:5]


BASH引号规则
双引号:能够识别变量以及实现转义
单引号:阻止shell对所有字符进行解释
倒引号:倒引号括起一个shell指令时,这个指令会被执行,执行的结果作为这个表达式的值。(esc下方的按键"`")

定义数组
①array_name=(value1 value2 ... valuen)
②使用下标定义数组
array_name[0]=value1
array_name[1]=value2
...
array_name[n-1]=valuen

读取数组
语法:${array_name[index]}


获取数组所有元素
array_name[@]或array_name[*]

  • 输入/输出

接收用户输入
语法:read -p 提示信息 变量名

输出
①echo [arguments] //将参数传递给标准输出,最后自动加上一个换行符。
②printf format-string [arguments] //将参数按指定格式输出
 

  • 流程控制

条件测试
if语句
①单个条件if结构
if [ condition ]   
then
    command
fi
②多个条件if结构
if [ condition1 ]
then
    command1;
elif [ condition2 ]
then
    command2;
...
else
    commandN;
fi

case语句
case word in
    pattern1)
        command1
        ;;
    pattern2)
        command2
        ;;
    ...
    patternN)
        commandN
        ;;
    *)                 //*表示匹配所有字符串
        command
        ;;
esac

test指令
语法:test expr
作用:判断表达式expr是否为真,如果是返回true,否则返回false

"["指令
语法:[ expr ]
作用:与test指令一样。expr左右必须有空格

循环结构
while语句
语法(条件为真时执行)
while test-condition
do
    command
done

until语句
语法 (条件为假时执行)
until test-condition
do
    command
done

for语句
语法
for variable [in list]
do
    command
done

break语句:跳出所有循环
continue语句:跳出当前循环

  • 函数

定义格式
[function] funcname[()]
{
    command;
    [return int]
}

说明:
①可以带function funcname()定义,也可以直接funcname()定义
②return可加可不加,后跟数值(0~255)

  • 运算符

算术运算符:"+"、"-"、"*"、"/"、"%"、"-"
位运算符:"&"、"|"、"!"、"^"、"~"、"<<"、">>"
语法(以+为例):
①num=`expr 1 + 1`
②num=$[ 1 + 1 ]
③let num=1+1


$[]可以接受不同基数的数,默认为10进制,使用[base#]n来表示二到三十六进制任何一个n值
 
关系运算符(数字)
①条件操作符:"=="、"!="、">"、"<"、">="、"<="
②test指令内建操作符
-eq:判断两个数是否相等,相等返回true
-ne:判断两个数是否相等,不相等返回true
-gt:判断左边的数是否大于右边的数,如果是,返回true
-lt:判断左边的数是否小于右边的数,如果是,返回true
-ge:判断左边的数是否大于等于右边的数,如果是,返回true
-le:判断左边的数是否小于等于右边的数,如果是,返回true
 


逻辑运算符
①条件操作符:"&&"、"||"
②test指令内建操作符   
!:非运算符
-o:或运算符
-a:与运算符

注意:这里条件操作符连接的是两条test(或"[")指令,而test指令内建操作符是在同一条test(或"[")指令中使用


 
赋值运算符:"="、"+="、"-="、"*="、"/="、"%="、"&="、"^="、"|="、"<<="、">>="


 
字符串运算符
=:判断两个字符串是否相等,相等返回true
!=:判断两个字符串是否相等,不相等返回true
-z:判断字符串长度是否为0,为0返回true
-n:判断字符串长度是否为0,不为0返回true
str:判断字符串str是否为空,不为空返回true


 
文件测试运算符
-b file:判断文件是否是块设备文件,如果是,返回true
-c file:判断文件是否是字符设备文件,如果是,返回true
-d file:判断文件是否是目录,如果是,返回true
-f file:判断文件是否是普通文件(既不是目录,也不是设备文件),如果是,返回true
-q file:判断文件是否设置了SGID位,如果是,返回true
-k file:判断文件是否设置了粘着位(Sticky Bit),如果是,返回true
-p file:判断文件是否有名管道,如果是,返回true
-u file:判断文件是否设置了SUID位,如果是,返回true
-r file:判断文件是否可读,如果是,返回true
-w file:判断文件是否可写,如果是,返回true
-x file:判断文件是否可执行,如果是,返回true
-s file:判断文件是否为空(文件大小是否大于0),不为空返回true
-e file:判断文件是否存在,如果是返回true

  • 文件包含

语法
. 文件名(.后面跟一个空格)


 
设置别名:修改~/.bashrc文件,一行存一个别名
语法:alias 别名=文档路径

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章