郑州专业的网站建设公司排名,给公众号做头像的网站,wordpress 局域网 慢,免费注册个人个人网站Shell 脚本 Shell 脚本#xff08;shell script#xff09;#xff0c;是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本#xff0c;但读者朋友要知道#xff0c;shell 和 shell script 是两个不同的概念。 由于习惯的原因#xff0c;简洁起见shell script是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本但读者朋友要知道shell 和 shell script 是两个不同的概念。 由于习惯的原因简洁起见本文出现的 shell编程 都是指 shell 脚本编程不是指开发 shell 自身。 Shell 环境 Shell 编程跟 JavaScript、php 编程一样只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多常见的有
Bourne Shell/usr/bin/sh或/bin/sh Bourne Again Shell/bin/bash C Shell/usr/bin/csh K Shell/usr/bin/ksh Shell for Root/sbin/sh …… 本教程关注的是 Bash也就是 Bourne Again Shell由于易用和免费Bash 在日常工作中被广泛使用。同时Bash 也是大多数Linux 系统默认的 Shell。 在一般情况下人们并不区分 Bourne Shell 和 Bourne Again Shell所以像 #!/bin/sh它同样也可以改为 #!/bin/bash。
// #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。 即使用哪一种 Shell。
扩展名为 shsh代表shell扩展名并不影响脚本执行见名知意就好如果你用 php 写 shell 脚本扩展名就用 php 好了。
//echo 命令用于向窗口输出文本。 运行 Shell 脚本有两种方法 1、作为可执行程序 chmod x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本 注意一定要写成 ./test.sh而不是 test.sh运行其它二进制的程序也一样直接写 test.shlinux 系统会去 PATH 里寻找有没有叫 test.sh 的而只有 /bin, /sbin, /usr/bin/usr/sbin 等在 PATH 里你的当前目录通常不在 PATH 里所以写成 test.sh 是会找不到命令的要用 ./test.sh 告诉系统说就在当前目录找。 2、作为解释器参数
这种运行方式是直接运行解释器其参数就是 shell 脚本的文件名如 /bin/sh test.sh /bin/php test.php
这种方式运行的脚本不需要在第一行指定解释器信息写了也没用。 // Shell 变量 定义变量 your_namerunoob.com 注意变量名和等号之间不能有空格 变量名首个字符不能以数字开头。
//使用变量 echo $your_name echo ${your_name} 变量名外面的花括号是可选的加不加都行加花括号是为了帮助解释器识别变量的边界推荐给所有变量加上花括号这是个好的编程习惯。
使用 readonly 命令可以将变量定义为只读变量
使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。 变量类型 运行shell时会同时存在三种变量 1) 局部变量 局部变量在脚本或命令中定义仅在当前shell实例中有效其他shell启动的程序不能访问局部变量。 2) 环境变量 所有的程序包括shell启动的程序都能访问环境变量有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量有一部分是局部变量这些变量保证了shell的正常运行 //Shell 字符串 字符串可以用单引号也可以用双引号也可以不用引号。 单引号 strthis is a string 单引号里的任何字符都会原样输出单引号字符串中的变量是无效的
双引号 your_namerunoob strHello, I know you are \$your_name\! \n echo -e $str 输出结果为 Hello, I know you are runoob!
双引号的优点 双引号里可以有变量 双引号里可以出现转义字符
//拼接字符串 实例 your_namerunoob # 使用双引号拼接 greetinghello, $your_name ! greeting_1hello, ${your_name} ! echo $greeting $greeting_1
# 使用单引号拼接 greeting_2hello, $your_name ! greeting_3hello, ${your_name} ! echo $greeting_2 $greeting_3 输出结果为
hello, runoob ! hello, runoob ! hello, runoob ! hello, ${your_name} !
//获取字符串长度 实例 stringabcd echo ${#string} # 输出 4 变量为数组时${#string} 等价于 ${#string[0]}:
实例 stringabcd echo ${#string[0]} # 输出 4 //提取子字符串 以下实例从字符串第 2 个字符开始截取 4 个字符
实例 stringrunoob is a great site echo ${string:1:4} # 输出 unoo //查找子字符串 查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)
实例 stringrunoob is a great site echo expr index $string io # 输出 4 注意 以上脚本中 是反引号而不是单引号 不要看错了哦。
//Shell 数组 bash支持一维数组不支持多维数组并且没有限定数组的大小。
例如
array_name(value0 value1 value2 value3) 或者
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[*]} # 取得数组单个元素的长度 lengthn${#array_name[n]} //Shell 注释 以 # 开头的行就是注释会被解释器忽略。 //多行注释 多行注释还可以使用以下格式
:EOF 注释内容... 注释内容... 注释内容... EOF
EOF 也可以使用其他符号:
实例 : 注释内容... 注释内容... 注释内容...
:! 注释内容... 注释内容... 注释内容... ! //Shell 传递参数 向脚本传递参数脚本内获取参数的格式为$n。n 代表一个数字1 为执行脚本的第一个参数2 为执行脚本的第二个参数以此类推…
实例 #!/bin/bash # author:菜鸟教程 # url:www.runoob.com
echo Shell 传递参数实例; echo 执行的文件名$0; echo 第一个参数为$1; echo 第二个参数为$2; echo 第三个参数为$3;
输出 $ chmod x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例 执行的文件名./test.sh 第一个参数为1 第二个参数为2 第三个参数为3 实例 #!/bin/bash # author:菜鸟教程 # url:www.runoob.com
echo Shell 传递参数实例; echo 第一个参数为$1;
echo 参数个数为$#; echo 传递的参数作为一个字符串显示$*; 执行脚本输出结果如下所示
$ chmod x test.sh $ ./test.sh 1 2 3 Shell 传递参数实例 第一个参数为1 参数个数为3 传递的参数作为一个字符串显示1 2 3 $* 与 $ 区别
相同点都是引用所有参数。 不同点只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3则 * 等价于 1 2 3传递了一个参数而 等价于 1 2 3传递了三个参数。 实例 #!/bin/bash # author:菜鸟教程 # url:www.runoob.com
echo -- \$* 演示 --- for i in $*; do echo $i done
echo -- \$ 演示 --- for i in $; do echo $i done 执行脚本输出结果如下所示
$ chmod x test.sh $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $ 演示 --- 1 2 3 //Shell echo命令用于字符串的输出
普通字符 echo It is a test 这里的双引号完全可以省略以下命令与上面实例效果一致 echo It is a test
转义字符 echo \It is a test\ 结果将是: It is a test 同样双引号也可以省略
显示变量read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh read name echo $name It is a test 以上代码保存为 test.shname 接收标准输入的变量结果将是:
[rootwww ~]# sh test.sh OK #标准输入 OK It is a test #输出
//显示换行 echo -e OK! \n # -e 开启转义 echo It is a test 输出结果
OK!
It is a test //显示不换行 #!/bin/sh echo -e OK! \c # -e 开启转义 \c 不换行 echo It is a test 输出结果
OK! It is a test
//显示结果定向至文件 echo It is a test myfile //原样输出字符串不进行转义或取变量(用单引号) echo $name\ 输出结果
$name\ 反引号在英文输入法下位于键盘左上角数字1键的左边、Esc键的下方。显示命令执行结果 echo date 注意 这里使用的是反引号 , 而不是单引号 。
结果将显示当前日期
Thu Jul 24 10:08:46 CST 2014
//Shell 流程控制注意sh 的流程控制不可为空 if(){ // 不做任何事情 } else { // 不做任何事情 } sh/bash 里可不能这么写如果 else 分支没有语句执行就不要写这个 else。 文章转载自: http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.cjmmn.cn.gov.cn.cjmmn.cn http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.zknxh.cn.gov.cn.zknxh.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.yprnp.cn.gov.cn.yprnp.cn http://www.morning.chongzhanggui.cn.gov.cn.chongzhanggui.cn http://www.morning.ykkrg.cn.gov.cn.ykkrg.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.hrypl.cn.gov.cn.hrypl.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.fhntj.cn.gov.cn.fhntj.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn http://www.morning.pthmn.cn.gov.cn.pthmn.cn http://www.morning.drmbh.cn.gov.cn.drmbh.cn http://www.morning.xrmwc.cn.gov.cn.xrmwc.cn http://www.morning.lwlnw.cn.gov.cn.lwlnw.cn http://www.morning.prhfc.cn.gov.cn.prhfc.cn http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.djxnw.cn.gov.cn.djxnw.cn http://www.morning.lhytw.cn.gov.cn.lhytw.cn http://www.morning.syrzl.cn.gov.cn.syrzl.cn http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.bpcf.cn.gov.cn.bpcf.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.tpkxs.cn.gov.cn.tpkxs.cn http://www.morning.wddmr.cn.gov.cn.wddmr.cn http://www.morning.fgxws.cn.gov.cn.fgxws.cn http://www.morning.ghrlx.cn.gov.cn.ghrlx.cn http://www.morning.spfq.cn.gov.cn.spfq.cn http://www.morning.gkdhf.cn.gov.cn.gkdhf.cn http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.jrwbl.cn.gov.cn.jrwbl.cn http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.pbzgj.cn.gov.cn.pbzgj.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.gkgr.cn.gov.cn.gkgr.cn http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn http://www.morning.chehb.com.gov.cn.chehb.com http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.rjnm.cn.gov.cn.rjnm.cn http://www.morning.jnptt.cn.gov.cn.jnptt.cn http://www.morning.zxfdq.cn.gov.cn.zxfdq.cn http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.rqknq.cn.gov.cn.rqknq.cn http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.bgygx.cn.gov.cn.bgygx.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn http://www.morning.wpkr.cn.gov.cn.wpkr.cn http://www.morning.ychoise.com.gov.cn.ychoise.com http://www.morning.phxdc.cn.gov.cn.phxdc.cn http://www.morning.xnfg.cn.gov.cn.xnfg.cn http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn http://www.morning.lznfl.cn.gov.cn.lznfl.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn