#!/bin/sh#!/bin/bash#!/user/bin/env/ bashpython中:#!/user/bin/env/ python1.创建 .sh文件2.编写echo \"hello\"echo \"i am liyinhang\"exit 03.执行 chmod a+x xx.sh对脚本授予可执行权限4.输入 ./xx.sh执行脚本5.查看脚本退出状态:echo $?-linux中所有程序执行后都有状态码-状态码为 0 表示正常,状态码为 正整数 代表异常推出二、变量1.定义#变量定义:等号前后没有空格a=12345b=xyz2.使用#使用变量时,变量名前面加上$符echo \"---$a---\\n===$b===\"printf \"---$a---\\n===$b===\\n\"两者区别在于echo自动换行,printf不换行3.注意引号的差别echo \"---$a---\\n===$b===\"echo \'---$a---\\n===$b===\\n\'4.定义当前shell下的全局变量-定义:export ABC=9876543212-定义完成后,在终端里用source加载脚本:source xx.sh5.常用的系统环境变量-$PATH:可执行文件目录-$PWD:当前目录-$HOME:家目录-$USER:当前用户名-$UID:当前用户的uid三、获取用户的输入read -p \"请输入一个数字:\"numecho \"您输入的时:$num\"四、脚本里的引号1.反引号:里面的内容会被解析成为脚本echo `ls -a /home/chris` #打印 /home/chris目录下所有的文件和文件夹2.双引号:它里面的内容会被原样显示,但如果是一个变量,这个变量会被解析name=liyinhangecho \"大家好,我是$name\" #大家好,我是liyinhang3.单引号:它里面的内容会完全原样输出name=zhangsanecho \'大家好,我是$name\' # 大家好,我是$name五、脚本里的$1.${var} 用来获取一个变量的值,一般情况下,大括号可以省略不写name=bankecho ${name} #bankecho $name #bank2.特殊变量$# 代表传入参数的个数$@ 代表传入参数的列表$0 代表脚本本身$1 代表传入的第一个参数,$2,$3...以此类推$* 以字符串方式显示所有传入的参数$$ 脚本运行的进程ID$? 显示最后命令的退出状况,0表示没有错误3.$(cmd)用来执行括号里的脚本命令,相当于使用反引号echo $(ls /home/chris/Desktop) # 列出当前用户的桌面上的所有文件和文件夹4.$((expression))用来计算数学表达式expression的值echo $((1+1)) # 2六、分支语句1.ifif command;thencommandselif command;thencommandselsecommandsfi2.条件测试命令[ ... ]:参数两边必须有空格它可以进行三种比较-数值比较-字符串比较-文件比较用法:if [ condition ];thencommandsfi数值比较Condition 说明n1 -eq n2 检查n1是否与n2相等n1 -ge n2 检查n1是否大于或等于n2n1 -gt n2 检查n1是否大于n2n1 -le n2 检查n1是否小于n2n1 -lt n2 检查n1是否小于n2n1 -ne n2 检查n1是否不等于n2字符串比较Condition 说明str1 = str2 检查str1是否和str2相同(注意:等号两边要加空格)str1!=str2 检查str1是否和str2不同str1<str2 检查str1是否小于str2(需要使用[[]])str1>str2 检查str1是否大于str2(需要使用[[]])-n str1 检查str1的长度是否非0(变量需要添加双引号)-z str1 检查str1的长度是否为0文件比较Condition 说明-d file 检查file是否存在并且是一个目录-e file 检查file是否存在-f file 检查file是否存在并且是一个文件-r file 检查file是否存在并且可读-w file 检查file是否存在并且可写-x file 检查file是否存在并且可执行-s file 检查file是否存在并且非空-O file 检查file是否存在并且属于当前用户所有-G file 检查file是否存在并且所属组与当前用户相同file1 -nt file2 检查file1是否比file2新file1 -ot file2 检查file1是否比file2旧七、case语句#!/bin/bashread -p \"请输入数字\" numcase $num in0)echo 星期日;;1)echo 星期一;;2)echo 星期二;;3)echo 星期三;;4)echo 星期四;;5)echo 星期五;;6)echo 星期六;;*)echo 其他;;esac八、循环语句:for基本格式:for 变量 in 序列do要执行的命令doneeg:for i in `seq 1 10`doif [ $[ $i % 2] == 0 ]thenecho \"偶数: $i\"elseecho \"奇数: $i\"fidoneseq START END 语句用来产生一个数字序列$[ NUM1 + NUM2 ] 语句用来进行基本的数学运算[[ ... ]] 语句用来更方便的进行比较判断九、函数function foo() {echo \"---------------------------\"echo \"Hello $1, nice to meet you!\"echo \"---------------------------\"}function可以省略传参:foo arg1 arg2 arg3 ...eg:bar() {echo \"执行者是 $0\"echo \"参数数量是 $#\"echo \"全部的参数 $@\"echo \"全部的参数 $*\"if [ -d $1 ]; then # 检查传入的第一个参数是否是文件夹for f in `ls $1`doecho $fdoneelif [ -f $1 ]; thenecho \"This is a file: $1\" # 如果不是文件夹, 直接显示文件名elseecho \'not valid\' # 前面都不匹配显示默认语句fi}bar $1十、数组1.Shell 数组用括号来表示,元素用\"空格\"符号分割开,语法格式如下:array_name=(value1 ... valuen)2.也可以直接使用下标来定义一个数组。num[0]=1num[1]=\"good\"num[2]=yes3.使用下标可以直接修改数组里的数据arr=(hello good \"yes\" 12)arr[0]=hi4.使用$和下标可以获取一个数组里的数据,但是注意需要使用{}来包裹变量arr=(hello good \"yes\" a 12)echo ${arr[0]}5.使用*或者@作为下标,可以获取数组里的所有数据。arr=(hello good \"yes\" a 12)echo ${arr[*]}echo ${arr[@]}6.在获取所有数据的前面添加# 可以获取到数组的长度arr=(hello good \"yes\" a 12)echo ${#arr[*]}echo ${#arr[@]}7.for...in 遍历#!/bin/basharr=(hello good 12 \'yes\' hi)for ele in ${arr[*]}doecho $eledone