shell学习笔记

来源:互联网 发布:linux ifconfig 找不到 编辑:程序博客网 时间:2024/06/16 01:07

注释:
单行用#,多行用
:<

#!bin/bashecho 'hello'#变量的声明:d="aaa"echo $d:<<!#语句声明变量for f in `ls /etc`do    echo $fdone!

使用变量:

echo $f

或者用${ }来告诉解释器,变量的边界在哪里

for i in 12345do    echo "list have ${i}"done#list have 12345

单引号,双引号,反引号
1)单引号括起来的字符都作为普通字符出现。
2)双引号括起来的字符,除$(美元符号)、\(反斜杠)、’(单引号)、和”(双引号)这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。
3)反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。

字符串拼接

name_1='xiao'name_2='cong ${name_1}'name_3="cong ${name_1}"name_4="cong "${name_1}""echo $name_1 $name_2 $name_3 $name_4#xiao cong ${name_1} cong xiao cong xiao

取字符串的长度

echo ${#name_1}#4

查询子字符串的索引
expr 求表达式变量的值。express表达

echo `expr index "string" r`#3echo `expr index $name_1 x`#1,索引是从1开始的!!!!

数组
以空格分隔!
取长度和字符串一样,在变量前加#

array_name=(1 q e 3 A [1,3,4])#取全部 1 q e 3 A [1,3,4]echo ${array_name[*]}echo ${array_name[@]}#取某一个[1,3,4]echo ${array_name[5]}a=${array_name[0]}echo $a#1#length,取所有数组的长度echo len=${#array_name[@]}echo len=${#array_name[*]}#one取单个元素的长度,7,包含符号echo ${#array_name[5]}

传递参数的实例:

#!/bin/bash#author:liecho "shell 传递参数的实例!"echo "第一个参数为: $1"echo "第一个参数为: $2"echo "参数的个数为: $#"echo "传递的参数作为字符串来显示: $*"
$ sh test2.sh 1 2shell 传递参数的实例!第一个参数为: 1第一个参数为: 2参数的个数为: 2传递的参数作为字符串来显示: 1 2
$* 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 123,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
echo "--\$*演示 ---"for i in "$*";do    echo $idoneecho "--\$@ 演示---"for i in "$@";do    echo $idone
$ sh /cygdrive/c/Users/Administrator/Desktop/test2.sh 1 2 5--$*演示 ---1 2 5--$@ 演示---125

基本运算符
expr 求表达式变量的值。express表达

#+ - * / % == !=echo `expr 2 + 2`a=2b=3#乘号(*)前边必须加反斜杠(\)才能实现乘法运算;echo `expr $a \* $b`if [ $a == $b ]then    echo "a等于b"fiif [ $a != $b ];then    echo "a不等于b"fi

关系运算符

  1. 关系运算符只支持数字,除非字符串的值是数字。
  2. -eq,比较是否相等,相等返回true.
    -eq : 是否相等
    -ne : 是否不相等
    -gt : 大于
    -lt : 小于
    -ge : 大于等于
    -le : 小于等于
if [ $a -eq $b ];then    echo "a等于b"elif [ $a -gt $b ];then    echo "a大于b"else [ $a -lt $b ]    echo "a小于b"fi

布尔运算符
!非运算
-a与运算
-o 或运算

这里写代码片

逻辑运算符
逻辑与&&,逻辑的and
逻辑或||,逻辑的or

#逻辑与 && 逻辑或||a=20b=50if [[ $a -gt 10 && $b -lt 40 ]]then    echo "返回 true"else    echo "返回 False"fi

文件测试运算符
-e 检测文件或目录是否存在
-d 检测文件是否是目录,[ -d $file ]
-f 检测文件是不是普通文件,既不是目录,也不是设备文件
-r -w -x 可读可写可执行
-s 检测文件是否为空

echo
转移字符用\

echo "\"It is a test\"""It is a test"

显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值赋值给 shell 变量。

read aecho "$a is test"

换行符:
\n需要加开启转移 -e

echo -e "ok! \n"echo "ok"
ok!ok

不换号符\C

echo -e "ok! \c"echo "ok"
ok! ok

单引号不转移,原样输出

将输出,保存至文件,文件直接被新建

echo "ok!" > file$ cat fileok!

显示命令执行结果
echo data

test 命令用于检查某个条件是否成立
它可以进行数值、字符和文件三个方面的测试
*代码中的 [] 执行基本的算数运算

a=10b=20if test $[a+b] -eq $[b*2];then    echo "a等于b"else    echo "ab不相等"fi

字符串的比较测试
= 相等
!= 不等
-z 字符串长度为0 为真
-n 字符串长度不为0 则为真

a="111"b="sss"if test $a = $b;then    echo "a等于b"else    echo "ab不相等"fi
#ps -ef 全格式输出所有进程#grep -c  xxx 统计匹配的行数#这条作用是用来判断ssh这个进程是否存在if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

流程控制

if 条件then    commandfiif 条件then    command1else    command2fiif 条件;thenelif 条件;thenelsefi
for 条件do    commanddone
while 条件do    commanddone
#如果int小于等于5,那么条件返回真。int从0开始,每次循环处理时,int加1。int=0while ([ $int -le 5 ])do    echo $int    let "int++"done#这里比较表达式用[]包裹,#let 执行一个或多个命令#"int++"自增

无限循环

while :do    commanddonewhile true:do    command2done

until循环执行一系列命令直至条件为真时停止。
条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次—请注意这一点。

int=0until ([ $int -gt 5 ])do    echo $int    let "int++"done012345

case

echo '输入 1 到 4 之间的数字:'echo '你输入的数字为:'read aNumcase $aNum in    1)  echo '你选择了 1'    ;;    2)  echo '你选择了 2'    ;;    3)  echo '你选择了 3'    ;;    4)  echo '你选择了 4'    ;;    *)  echo '你没有输入 1 到 4 之间的数字'    ;;esac
原创粉丝点击