博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell入门
阅读量:5864 次
发布时间:2019-06-19

本文共 5397 字,大约阅读时间需要 17 分钟。

hot3.png

变量

变量

变量引用:$ 和 ${}

命令替换

命令输出中提取信息,并将其赋给变量 反引号 和 $()

wu=`命令` 或者 wu =$()

注意:`` 和 $() 与= 不能有空格

echo/读取:read

echo命令可用单引号或双引号来划定文本字符串,便可以正常输出。 echo -n :文本字符串和命令输出显示在同一行中

read -p "Enter your age:" name echo "hello $name"

read –p 相当于 echo -n 提示作用

read -p "Enter your name: " first lastecho "Checking data for $last, $first…"

-t 指定时间-s 隐藏输入内容(可用于输入密码)read 文件内容count=1cat test | while read linedo  echo "Line $count: $line"  count=$[ $count + 1 ]done

标准输入输出

ls -la t test3 test4 2>text1 1>text&>test 则正确和错误输入到同一个文件

运算符

expr

处理数学表达式 ARG1 | ARG2 如果ARG1既不是null也不是零值,返回ARG1;否则返回ARG2 ARG1 & ARG2 如果没有参数是null或零值,返回ARG1;否则返回0 ARG1 % ARG2 返回ARG1被ARG2除的算术余数 *号等运算符识别不出 需要 加 \ expr 5 \* 2

整数运算$[ ]

bash shell数学运算符只支持整数运算 var1=$[1+5]

var1=$[$var * 2]

浮点运算 bc

直接输入bc,进行运算 –q 不显示bash计算器冗长的欢迎信息 scale 控制小数位数

if结构化语句

If 条件;then fi

If 条件;then else fi

if 条件;then elif 条件;then fi

方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错 if [ condition ] then commands fi

数值比较

-eq 相等 -ge 大于或等于 -gt 大于 -le 小于或等于 -lt 小于 -ne 不等于

字符串比较

str1 = str2 检查str1是否和str2相同 str1 != str2 检查str1是否和str2不同 str1 < str2 检查str1是否比str2小 str1 > str2 检查str1是否比str2大 -n str1 检查str1的长度是否非0 -z str1 检查str1的长度是否0 -o 或 相当于 || -a 和 相当于 &&

>

-n

文件比较

-d file 检查file是否存在并是一个目录 -f file 检查file是否存在并是一个文件 -e file 检查file是否存在 -s file 检查file是否存在并非空 -r file 检查file是否存在并可读 -w file 检查file是否存在并可写 -x file 检查file是否存在并可执行 -O file 检查file是否存在并属当前用户所有 -G file 检查file是否存在并且默认组与当前用户相同 file1 -nt file2 检查file1是否比file2新 file1 -ot file2 检查file1是否比file2旧

复合条件测试

if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:  [ condition1 ] && [ condition2 ]  [ condition1 ] || [ condition2 ]

用于数学表达式的双括号

双括号:比较过程中使用高级数学表达式 val++ 后增 val-- 后减 ++val 先增 --val 先减 ! 逻辑求反 ~ 位求反 ** 幂运算 << 左位移 />> 右位移 & 位布尔和 | 位布尔或 && 逻辑和 || 逻辑或 == 匹配字符

用于高级字符串处理功能的双方括号

双方括号:针对字符串比较的高级特性 采用的标准字符串比较,具有模式匹配

结构

case

变量和模式是匹配的 通过竖线操作符在一行中分隔出多个模式模式:Y|y * 会捕获所有与已知模式不匹配的值

shift 移动变量

操作命令行参数 根据它们的相对位置来移动命令行参数 默认情况下它会将每个参数变量向左移动一个位置 即变量$3的值会移到$2中,变量$2的值会移到$1中,而变量$1的值则会被删除

#!/bin/bashecho "The original:$*"shift 2	#移动两个位置echo "The position $1"

双破折线

双破折线表示选项列表结束。在双破折线之后脚本就可以放心地将剩下的命令行参数当作参数,而不是选项来处理了

#!/bin/bashwhile [ -n "$1" ]do        case "$1" in                -a) echo "Found the -a option" ;;                -b) echo "Found the -b option";;                -c) echo "Found the -c option" ;;                --) shift                break ;;                *) echo "$1 is not an option";;        esacshiftdone#count=1for param in $@do        echo "Parameter #$count: $param"        count=$[ $count + 1 ]done

#!/bin/bashwhile [ -n "$1" ]docase "$1" ina) echo "print a";;b) echo "print b";;--) shift    break;;*) echo "$1 is not an option";;esacshiftdonecount=1for param in $@doecho "param #$count: $param"count=$[ $count + 1 ]done

在遇到双破折线时,脚本用break命令来跳出while循环。由于过早地跳出了循环,我们需 要再加一条shift命令来将双破折线移出参数变量

for

for var in list(遍历自身定义一系列值) do commands done

处理循环的输出

#!/bin/bash for (( a=1;a<10;a++ )) do echo "The number is $a" done > wu.txt 对循环的输出使用管道或进行重定向到文件中

更改字段分隔符

bash shell默认 空格 制表符 换行符 为分隔符 IF=$ 可以制定分隔符 IF=\ $’\n’ ,只有\n为分隔符

c语言for

for (( i = 1; i <= 10; i++ )) do command done

while

while command

设置单个命令

只要测试条件成立, while命令就会不停地循环执行定义好的命令 测试条件中用到的变量必须修改,否则就会陷入无限循环

设置多个命令

只有最后一个测试命令的退出状态码会被用来决定什么时候结束循环

until

untile test commands do other commands done

until条件成立则不执行,条件不成立则执行与 while 相反

设置单个命令

设置多个命令

控制循环

break

退出任意类型的循环 跳出当前正在执行的循环,完全终止整个循环

break n n指定了要跳出的循环层级

continue

continue命令可以提前中止某次循环中的命令但并不会完全终止整个循环。 跳过此次循环中剩余的命令,但整个循环还会继续。 可以在循环内部设置shell不执行命令的条件。

continue n

实例

查找可执行文件

1.png

这个脚本使用了两个不同的IFS值来解析数据。第一个IFS值解析出/etc/passwd文件中的单独 的行。内部for循环接着将IFS的值修改为冒号,允许你从/etc/passwd的行中解析出单独的值。

处理用户输入

$0 表示程序名本身

在第9个变量之后,你必须在变量数字周围加上花括号,比如/${10}

解决变量$0不显示就会使用整个路径。

#!/bin/bashname=$(basename $0)echo The script name is:$nameecho This is $0

$# 参数统计

判断命令行上有多少参数 echo there were $#

抓取所有的数据

$*  将这些参数视为一个整体$@   参数当作同一字符串中的多个独立的单词#!/bin/bashcount=1 for param in "$*"do  echo "\$* is #$count=$param"  count=$[ $count + 1 ]donefor param in "$@"do  echo "\$@ is #$count=$param"  count=$[ $count + 1 ]done

${!#}

没有任何参数时, $#的值为0, ${!#}变量会返回命令行用到的脚本名 带参数时,显示数量相当于 !#

#!/bin/bashnum=$#echo The num is $numecho The "!#" is ${!#}

带参数时,显示数量没带参数时,显示脚本名

$$ $?

显示当前进程 上个命令的退出状态

函数

创建函数

有两种格式 一 function name { commands }

二 name() { commands } name函数的唯一名称,若定义名字一样则后续会替换第一个 commands函数中出现的顺序依次执行 注: name 和 { 要有空格,否则出错

#!/bin/bash function wu { echo  "This my first function"}count=1while [ $count -le 3 ]do  wu  count=$[ $count + 1 ]donewu

function wu {  echo $[ $1 * $2 ]}if [ $# -eq 2 ];then  value=$(wu $1 $2)  echo "The result is $value"else echo "uage:file a b"fi

前面的$1h和$2和脚本主体中的$1和$2变量并不相同 要在函数中使用这些值,必须在调用函数时手动将它们传过去。

return

函数的退出状态码是函数中最后一条命令返回的退出状态码:$? 但是无法知道其他命令中是否成功运行 return命令来退出函数并返回特定的退出状态码(整数值0~255,大于则会出错)

function wu {read -p "Enter a value: " valuereturn $[ $value * 2 ]}注意:函数一结束就取返回值退出状态码必须是0~255

break

退出函数并返回特定的退出状态码 跳出循环体,该循环体已结束

contiune

中断循环中的迭代,若有指定的条件则继续循环下一个迭代 循环没有结束

局部变量

函数内部使用的任何变量都可以被声明成局部变量 局部变量:在变量声明的前面加上local关键

function wu { local temp=$[ $value + 5 ] result=$[ $temp * 2 ]}temp=4value=6wuecho "The result is $result"if [ $temp -gt $value ];thenecho "temp is larger"elseecho "temp is smaller"fi

数组

如果你试图将该数组变量作为函数参数,函数只会取数组变量的第一个值。 将该数组变量的值分解成单个的值,然后将这些值作为函数参数使用。 在函数内部,可以将所有的参数重新组合成一个新的变量。

#!/bin/bashfunction testit {[图片上传中...(5.png-438497-1538820881421-0)]local newarray=`echo "$@"`echo "The new array value is: ${newarray[*]}"}myarray=(1 2 3 4 5)echo "The original array is ${myarray[*]}"testit ${myarray[*]}

转载于:https://my.oschina.net/wuzsheng/blog/2223201

你可能感兴趣的文章
ROS验证publisher和subscriber
查看>>
zencart后台隐藏配置菜单configuration.php?gID=6
查看>>
css网页使用自定义字体方法
查看>>
python之错误调试
查看>>
C/C++面试题总结(1)
查看>>
Notes:SVG(3)---滤镜和渐变
查看>>
yaf && cli实战笔记
查看>>
【转载】30个最常用css选择器解析
查看>>
[Errno 2] No such file or directory
查看>>
xadmin集成DjangoUeditor,以及编辑器的视频路径配置
查看>>
PoEdu - C++阶段班【Po学校】- 第3天
查看>>
ios 开发 隐藏状态栏 更改状态栏颜色
查看>>
python并发编程之多进程
查看>>
[Python3网络爬虫开发实战] 1.7.2-mitmproxy的安装
查看>>
iOS推送跳转AppDelegate跳转VC
查看>>
透过Nim游戏浅谈博弈
查看>>
【转】以太网最大帧和最小帧、MTU
查看>>
MYSQL 优化常用方法
查看>>
Sharepoint 2013 启用搜做服务
查看>>
详解BarTender符号体系特殊选项之“行数”
查看>>