shell基础
2016-09-22 19:35
120 查看
# for skill in Ada Coffe ACtion Java;do echo "I am good at ${skill}Script" done #定义变量时,=左右不能有空格。定义变量时没有$,使用时必须有$ aa="http://www.w3school.cc" #readonly 表示只读属性。 readonly aa #aa="Http://www.baidu.com" # unset 变量删除 unset aa echo $aa # 单引号,不支持变量和转义。双引号支持变量和转义 k="Keytty" str1='111111111${k}' str2="111111111${k}" echo $str1 echo $str2 #拼接字符 your_name=$k greeting1="hello,"$your_name"!" greeting2="hello,"${your_name}"!" echo $greeting1 echo $greeting2 #获取字符串长度 string="abc" echo ${#string} #提取字符串 string="runoob is a site" echo ${string:1:4} #查找子字符串。查找is或s的位置。输出8 echo `expr index "$string" is` #定义数组 array_name=(value0 value1 value2 value3).用空格分开 array_name=(value0 value1 value2 value3) echo ${array_name[1]} #使用@ 获取数组中所有元素 echo ${array_name[@]} #获取数组长度 echo ${#array_name[@]} echo ${#array_name[*]} #获取单个元素长度 echo ${#array_name[1]} #获取参数为$0,$1,$2,,,,其中$0 表示执行的文件名.:!sh a.sh China Hangzhou echo "Shell 传递参数实例:" echo "执行文件名:$0" echo "第一个参数:$1" echo "第二个参数:$2" echo "传递脚本的参数个数:"$# echo "传递脚本的参数:"$* #$*把参数看成"China Hangzhou",$@把参数看成"China""Hangzhou" echo "脚本运行当前的进程号:"$$ echo "后台运行的最后一个进程号:"$! echo "传递脚本的参数:"$@ echo "显示shell使用的当前选项"$- #打印 hB 什么意思? echo "显示最后命令的退出状态:"$? #0 没有错误,其他任何值表示有错误 # 演示 $* 和 $@ echo "-------------\$*-----------" # 这里一定要加转义,否则就输出参数了 for i in "$*";do echo $i done echo "-------------\$@-----------" for i in "$@";do echo $i done #只支持一维数组,初始化不需要定义数组大小,由0开始 my_array=(A B "C" D) #my_array[4]="ChinaHangZhou" echo ${my_array[2]} echo ${my_array[3]} #chmod +x a.sh #expr表达式计算工具,完成表达式求值操作 val=`expr 2 + 2` #表达式和运算符之间要有空格,完整的表达式需要用``包括起来 echo "两数之和为:"$val #条件表达式必须放在方括号之间,如[ $a==$b ],括号与变量之间有空格 a=10 b=20 val=`expr $a + $b` echo '$a + $b = '$val val=`expr $a = $b` echo '$a - $b = '$val val=`expr $a \* $b` #注意乘号面前要加转义字符\ echo '$a * $b = '$val val=`expr $a / $b` echo '$a / $b = '$val val=`expr $a % $b` echo '$a % $b = '$val if [ $a == $b ] #注意这里要写成$a == $b then echo '$a==$b' fi if [ $a != $b ] then echo '$a!=$b' fi #Mac中expr表达式为$((表达式))乘号不需要转义符号\ #关系运算符 #只支持数字,不支持字符串,除非字符串是数字 # -eq :check if equal, [ $a -eq $b ] # -ne :check if no equal, [ $a -ne $b ] # -gt :check if greater than, [ $a -gt $b ] # -lt :check if less than, [ $a -lt $b ] # -ge :check if greater than or equal , [ $a -ge $b ] # -le :check if less than or equal , [ $a -le $b ] # 布尔运算 # ! 非运算符 [ !false ] # -o 或运算符 [ $a -lt 20 -o $b -gt 100 ] # -a 与运算符 [ $a -lt 20 -a $b -gt 100 ] a=10 b=20 if [ $a != $b ] then echo "$a != $b, not equal!" else echo "$a == $b, equal!" fi if [ $a -lt 100 -a $b -gt 25 ] then echo "$a -lt 100 -a $b -gt 25: return true" else echo "$a -lt 100 -a $b -gt 25: return false" fi if [ $a -lt 100 -o $b -gt 25 ] then echo "$a -lt 100 -o $b -gt 25:return true" else echo "$a -lt 100 -o $b -gt 25:return false" fi #逻辑运算符 # && 逻辑AND [[ $a -lt 100 && $b -gt 100 ]] return false # || 逻辑OR [[ $a -lt 100 || $b -gt 100 ]] return true if [[ $a -lt 100 && $b -gt 100 ]] then echo "[[ $a -lt 100 && $b -gt 100 ]]:return true" else echo "[[ $a -lt 100 && $b -gt 100 ]]:return false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "[[ $a -lt 100 || $b -gt 100 ]]:return true" else echo "[[ $a -lt 100 || $b -gt 100 ]]:return false" fi # 字符串运算符 # a="abc" # b="efg" # = 检查2个字符串是否相等,[ $a = $b ] false # != 检查2个字符串是否不相等, [ $a != $b ] true # -z 检查字符串长度是否为0,为0返回true,[ -z $a ] false # -n 检查字符串长度是否为0,不是0,返回true,[ -n $a ] true # str 检查字符串是否为空,不为空返回true [ $a ]true a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : return true" else echo "$a = $b : return falsee" fi if [ -z $a ] then echo "-z $a : 字符串长度为0,返回true" else echo "-z $a : 字符串长度不为0,返回false" fi if [ $a ] then echo "$a :字符串不为空" else echo "$a :字符串为空" fi #文件测试运算符 # -b file :检查文件是否块设备文件,是则返回true [ -b $file ] # -c file :检查文件是否字符设备文件,是则返回true # -d file :检查文件是不是目录,是则返回true # -f file :检查文件是不是普通文件,是则返回true # -g 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 file=$0 if [ -r $file ] then echo "$file :can read" else echo "$file :cannot read" fi if [ -w $file ] then echo "$file:can write" else echo "$file :cannot write" fi if [ -s $file ] then echo "$file: length>0" else echo "$file:length=0" fi if [ -e $file ] then echo "$file:exists" else echo "$file:not exists" fi #echo 命令 #打印"需要加转义字符 echo "打印字符\"是需要转义字符\\的" #read 命令从标准输入中读取一行 echo "Please enter input:" #read name echo "You Enter \"$name\"" # -e 开启转义 echo -e "Ok,换行\n换行结束" echo -e "Ok,不换行\c" #显示日期 echo `date` # for 循环 for var in item1 item2 itemN do echo $val done for loop in 1 2 3 4 5 do echo "The value is:$loop" done for str in "This is str1" "This is str2" do echo $str done # while int=1 while (( $int <= 5 )) #注意空格,注意这里是2个(()) do echo "This is while,int=$int" let "int++" done #echo "Enter <Ctrl-D> to quit." #echo -n 'Enter your favorate film:' #while read film #do # echo "Yes,$film is a good film!" # echo "Enter <Ctrl-D> to quit." # echo -n 'Enter your favorate film:' #done # until 循环 , 一直执行,直到条件为真时停止 myvar=1 until [ $myvar -gt 10 ] do echo "This is until,myvar=${myvar}" myvar=$(( $myvar + 1 )) done myvar=1 while [ $myvar -gt 10 ] # 一直执行,直到条件为假时停止 do echo "This is while,myvar=${myvar}" myvar=$(( $myvar + = )) done # case for item in item1 item2 item3 do case $item in item1) #注意要使用 item1)括号 echo "This is case item1:$item" ;; #注意本条case命令序列完成后已;;结束 item2) echo "This is case item2:$item" ;; *) # *)表示默认命令序列 echo "This is default command" ;; esac # esac 是case模块的结束标志,是case反着写 esac done # break 跳出循环 # continue 继续循环 # shell 函数 function doFunc() { echo "This is my first Func!" } doFunc2(){ #参数是$1,$1,...$n ,当天n>10时,需要使用${10}来获取参数 echo "The length of doFunc2 params is: "$# for param in $@ do echo $param done } echo "------------before call doFunc------------" doFunc #直接也函数名 echo "------------after call doFunc------------" echo "------------before call doFunc2------------" doFunc2 param1 param2 param3 # 传参直接跟在后面 echo "------------after call doFunc2------------" # 输入输出重定向 # >file # <file # >> file 追加 # n >& m 将输出文件m和n合并 # n <& m 将输入文件m和n合并 # <<tag将开始标记tag和结束标记tag之间的内容作为输入 # 标准输入文件:stdin的文件描述符为0 # 标准输出文件:stdout的文件描述符为1 # 标准错误文件:stderr的文件描述符为2 # stderr重定向到文件: command 2 >> file 追加的方式,>是覆盖 # 将stdout和stderr合并到一个文件输出:command >> file 2>&1 # Here Document 是Shell中一种特殊的重定向方式,用来将输入重定向到一个交互式Shell脚本或程序 # command << delimiter # document # delimiter # 作用是:将2个delimiter之间的内容作为输入传递给command。 # delimiter一定要定格写 wc -l << EOF Welcome to W3School ! www.w3school.cc EOF wc -l < $0 >> file 2>&1 # 将标准输出和错误输出重定向到file文件中 wc -l < $0 >> file2 2>&2 # 如果希望执行某个命令,但又不希望屏幕上显示输出结果,可以重定向到/dev/null # command > /dev/null # 写入到/dev/null的内容都会被丢弃。如果尝试从/dev/null中读取内容会什么也读不到。将输出重定向到/dev/null会起到“禁止输出”的效效果 echo "演示:wc -l < $0 > /dev/null 2>&1 " wc -l < $0 > /dev/null 2>&1 #禁止输出 #引用外部脚本.2种方式: . ./b.sh echo "b.sh的变量为:$b_var" source ./c.sh echo "c.sh的变量为:$c_var" #参考地址 http://www.runoob.com/linux/linux-shell.html[/code]
相关文章推荐
- Linux 基础 Shell
- shell入门基础
- shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)
- shell基础二:查找技巧,find及xargs的使用
- shell基础八:文本过滤工具(grep)
- shell基础三和四:后台(crontab,at,&,nohup)及(*,?,[]等)
- shell基础十:sed
- Linux 基础短训内容之系统启动和登录shell
- shell基础一:文件安全与权限
- 转chinaunix wingger shell基础十二篇
- shell基础
- shell入门基础必备
- shell基础一:文件安全与权限
- Linux下Shell基础知识简介
- Shell编程基础
- shell入门基础
- shell入门基础必备
- shell基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)
- shell基础六和七:执行顺序(||及&&,{}及())及正则表达式
- shell基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)