前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell编程基础

Shell编程基础

作者头像
lin_zone
发布2018-08-15 11:24:54
7310
发布2018-08-15 11:24:54
举报
文章被收录于专栏:LIN_ZONELIN_ZONELIN_ZONE

注:

  1. 本文说的都是bash(Bourne Again Shell),是sh(Bourne Shell)的扩展
  2. 扩展名不会影响脚本执行,见名知意就行,一般情况下扩展名是sh
  3. Shell注释:以 # 开头的行就是注释,会被解释器忽略,但是sh里面没有多行注释,只能每行加一个#
  4. 从Ubuntu 6.10开始,默认使用dash,需要手动执行命令将dash改为bash, 至于bash和dash的区别,详见https://blog.csdn.net/hshl1214/article/details/51122663
    1. 命令:sudo dpkg-reconfigure dash
    2. 然后在出现的页面中选择NO,之后就可以正常运行脚本了

运行Shell脚本的两种方法:

  1. 作为可执行程序
    1. 让脚本文件具有可执行权限 chmod +x file 加上执行权限,否则会提示无执行权限。
    2. ./文件名
    3. 注意,例要执行test.sh脚本,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
  2. 作为解释器参数 /bin/sh test.sh /bin/php test.php

Shell变量

  1. 定义变量的时,变量前不加美元符号,变量名和等号之间不能有空格 name="小明"
  2. 使用语句给变量赋值 for file in `ls /etc` for file in $(ls /etc)
  3. 使用变量 使用一个定义过的变量,只要在变量名前加 $ 符号即可 第二次给变量赋值的时候也不能加 $ 变量名外加上花括号能够帮助识别器识别变量的边界,推荐给所有变量加上花括号
  4. 只读变量 readonly myUrl="http://www.w3cschool.cc" readonly myUrl
  5. 删除变量 unset unset 变量名
  6. Shell字符串 字符串可以用单引号,也可以使用双引号,也可以不用引号。
    1. 获取字符串长度 string="abcd" echo ${#string} #输出 4
    2. 提取子字符串 #从第2个字符开始截取4个字符 string="runoob is a great site" echo ${string:1:4} # 输出 unoo
    3. 查找字符串 string="runoob is a great company" echo `expr index "$string" is` # 输出 8
  7. Shell数组 Shell只支持一维数组
    1. 定义数组 数组名=(值1 值2 值3 ……) 或 array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
    2. 读取数组 ${数组名[下标]} 使用@符号可以获取数组中的所有元素 例:echo ${array_name[@]}
    3. 获取数组的长度 length=${#array_name[@]} length=${#array_name[*]}

Shell传递参数

请参考:菜鸟教程参数传递 在执行脚本的时候可以向脚本传递参数,脚本获取参数的格式为:$n

Shell基本运算符

  1. 原生的bash不支持数学运算,但可以通过 awk 和 expr 命令来实现 expr 是一款表达式计算工具,可以用来完成表达式的求值操作 例:两个数相加 (注意==使用的是反引号,不是单引号==) #!/bin/bash val=`expr 2 + 2` echo "两数之和为 : $val"
  2. 注意:条件表达式要放在方括号之间,并且要有空格,例如: [\(a==\)b] 是错误的,必须写成 [ $a == $b ]。
  3. == != 用来比较两个数字

Shell test命令

请参考:菜鸟教程 test命令

Shell流程控制

  1. if else 相关 if condition1 then command1 elif condition2 then command2 else commandN fi
  2. for循环 for var in item1 item2 ... itemN do command1 command2 ... commandN done
  3. while 循环 while condition do command done
  4. 无限循环 #无限循环语法格式: while : do command done #或者 while true do command done #或者 for (( ; ; ))
  5. util 循环 until循环执行一系列命令直至条件为真时停止。 until condition do command done
  6. case 例: echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
  7. 跳出循环
    1. break
    2. continue

Shell函数

  1. 函数定义 [ function ] funname [()] { action; [return int;] }
  2. 函数参数 funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73 Shell 输入/输出重定向 请参考:菜鸟教程 Shell 输入/输出重定向
    1. 常见符号 > >> < <<
    2. 输出重定向 command1 > file1 注意:任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符
    3. 输入重定向 command1 < file1
    4. Here Document Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。 command << delimiter document delimiter 注意:结尾的delimiter前后一定要顶格写,前面及后面都不能有任何字符 例: cat << EOF 欢迎来到 菜鸟教程 www.runoob.com EOF
    5. /dev/nul是一个特殊的文件,写入到它的内容都会被丢弃,将命令的输出重定向到它会起到“禁止输出”的效果 $ command > /dev/null

Shell 文件包含

. filename   # 注意点号(.)和文件名中间有一空格
或
source filename

例: 有两个脚本,内容如下 test1.sh

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

url="http://www.runoob.com"

test2.sh

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

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

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

echo "菜鸟教程官网地址:$url"

然后执行test2.sh

$ chmod +x test2.sh 
$ ./test2.sh  
#结果:菜鸟教程官网地址:http://www.runoob.com

注:本文参考:菜鸟教程文档 如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8743180.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 运行Shell脚本的两种方法:
  • Shell变量
  • Shell传递参数
  • Shell基本运算符
  • Shell test命令
  • Shell流程控制
  • Shell函数
  • Shell 文件包含
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档