shell基础语法
来源:互联网 发布:2016年电子商务数据 编辑:程序博客网 时间:2024/05/30 20:07
shell基础语法基础:#!/bin/sh 必须以这个开头echo "Hello World !"执行脚本chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本或者 (解释器脚本)/bin/sh test.sh/bin/php test.php就是如何简单粗暴变量:your_name="runoob.com" 变量之间不能有空格 命名规则跟其他语言大体类似your_name="qinjx"echo $your_nameecho ${your_name} 使用变量 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script"donefor file in `ls /etc` 以上语句将 /etc 下目录的文件名循环出来。只读变量#!/bin/bashmyUrl="http://www.w3cschool.cc"readonly myUrlmyUrl="http://www.runoob.com"执行脚本会报错 /bin/sh: NAME: This variable is read only.删除变量unset variable_name单引号字串中不能出现单引号(对单引号使用转义符后也不行)。字符串拼接your_name="qinjx"greeting="hello, "$your_name" !"greeting_1="hello, ${your_name} !"echo $greeting $greeting_1截取字符串string="runoob is a great site"echo ${string:1:4} # 输出 unoo查找字符串string="runoob is a great company"echo `expr index "$string" is` # 输出 8 注意:注意: 以上脚本中 "`" 是反引号,而不是单引号 "'",不要看错了哦。数组:array_name=(value0 value1 value2 value3)array_name=(value0value1value2value3)array_name[0]=value0array_name[1]=value1array_name[n]=valuen输出数组所有元素echo ${array_name[@]}获取数组长度和数组单元长度# 取得数组元素的个数length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得数组单个元素的长度lengthn=${#array_name[n]}注释以"#"开头的行就是注释,会被解释器忽略。第二章节脚本 传递参数echo "Shell 传递参数实例!";echo "执行的文件名:$0";echo "第一个参数为:$1";echo "第二个参数为:$2";echo "第三个参数为:$3";$ chmod +x test.sh $ ./test.sh 1 2 3参数处理 说明$# 传递到脚本的参数个数$* 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。$$ 脚本运行的当前进程ID号$! 后台运行的最后一个进程的ID号$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。$- 显示Shell使用的当前选项,与set命令功能相同。$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。$* 与 $a 区别:相同点:都是引用所有参数。不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。#!/bin/bash# author:菜鸟教程# url:www.runoob.comecho "-- \$* 演示 ---"for i in "$*"; do echo $idoneecho "-- \$@ 演示 ---"for i in "$@"; do echo $idone执行脚本,输出结果如下所示:$ chmod +x test.sh $ ./test.sh 1 2 3-- $* 演示 ---1 2 3-- $@ 演示 ---123============算数运算符号==================val=`expr 2 + 2`echo "两数之和为 : $val"注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。-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。a=10b=20if [ $a -eq $b ]then echo "$a -eq $b : a 等于 b"else echo "$a -eq $b: a 不等于 b"fi==============布尔=====================a=10b=20if [ $a != $b ]then echo "$a != $b : a 不等于 b"else echo "$a != $b: a 等于 b"fi==========逻辑运算符==================a=10b=20if [[ $a -lt 100 && $b -gt 100 ]]then echo "返回 true"else echo "返回 false"fiif [[ $a -lt 100 || $b -gt 100 ]]then echo "返回 true"else echo "返回 false"fiecho使用echo "\"It is a test\"" 输出结果"It is a test"read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量#!/bin/shread name echo "$name It is a test"[root@www ~]# sh test.shOK #标准输入 用户输入OK It is a test #输出结果echo -e "OK! \n" # -e 开启转义echo "It it a test"echo -e "OK! \c" # -e 开启转义 \c 不换行echo "It is a test" > myfileecho `date` 系统变量sprintf %s %c %d %f都是格式替代符%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 Test命令文件测试参数 说明-e 文件名 如果文件存在则为真-r 文件名 如果文件存在且可读则为真-w 文件名 如果文件存在且可写则为真-x 文件名 如果文件存在且可执行则为真-s 文件名 如果文件存在且至少有一个字符则为真-d 文件名 如果文件存在且为目录则为真-f 文件名 如果文件存在且为普通文件则为真-c 文件名 如果文件存在且为字符型特殊文件则为真-b 文件名 如果文件存在且为块特殊文件则为真cd /binif test -e ./bashthen echo '文件已存在!'else echo '文件不存在!'fi流程控制if conditionthen command1 command2 ... commandN fi或者if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fifor循环for var in item1 item2 ... itemNdo command1 command2 ... commandNdone while 语法#!/bin/shint=1while(( $int<=5 ))do echo $int let "int++"echo '按下 <CTRL-D> 退出'echo -n '输入你最喜欢的电影名: 'while read FILMdo echo "是的!$FILM 是一部好电影"done运行脚本,输出类似下面:按下 <CTRL-D> 退出输入你最喜欢的电影名: w3cschool菜鸟教程是的!w3cschool菜鸟教程 是一部好电影无限循环无限循环语法格式:while :do commanddone死循环while :do commanddone或者for (( ; ; ))case分支echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'read aNumcase $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;;esacbreak跳出while :do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac自定义函数demoFun(){ echo "这是我的第一个 shell 函数!"}echo "-----函数开始执行-----"demoFunecho "-----函数执行完毕-----"使用函数: doneFun#!/bin/bash# author:菜鸟教程# url:www.runoob.comfunWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum))}funWithReturnecho "输入的两个数字之和为 $? !"funWithReturn函数带参数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重定向$ command >> file 2>&1 多个文件特俗定界符command << delimiter documentdelimiterdone$ wc -l << EOF 欢迎来到 菜鸟教程 www.runoob.comEOF3 # 输出结果为 3 行$文件包含#!/bin/bash# author:菜鸟教程# url:www.runoob.comurl="http://www.runoob.com"test2.sh 代码如下:#!/bin/bash# author:菜鸟教程# url:www.runoob.com#使用 . 号来引用test1.sh 文件. ./test1.sh# 或者使用以下包含文件代码# source ./test1.shecho "菜鸟教程官网地址:$url"接下来,我们为 test2.sh 添加可执行权限并执行:$ chmod +x test2.sh $ ./test2.sh
0 0
- SHELL基础语法
- shell脚本基础语法
- shell 常用语法基础
- linux shell基础语法
- SHELL 基础语法
- shell基础语法
- shell 基础语法
- shell基础语法
- shell 语法基础
- linux shell基础语法
- Shell的基础的语法
- shell脚本语法基础汇总
- Linux Shell编程语法基础
- shell简单的语法基础
- bash shell 基础(语法)
- shell脚本语言的基础语法
- Shell中if基础语法
- Shell中while基础语法
- c++对内存的浅谈以及内存泄漏问题的探讨之九
- zookeeper适用场景:zookeeper解决了哪些问题
- 最近读书总结
- linux 知识点
- 1
- shell基础语法
- pthread_once 和 pthread_key_t
- 解决Scrapy性能问题——案例二(含有阻塞的代码)
- iOS 单元测试OCMock介绍
- 控件PopupWindow的使用
- hbase shell基础和常用命令详解
- [LintCode] 逆序对 Reverse Pairs
- Servlet实现文件上传,可多文件上传
- Java String.split()用法小结