shell学习总结

关于shell编程的学习总结----查阅使用

1.shell是一个用c语言编写的程序,是用户使用Linux的桥梁。Shell即是一种命令语言也是一种程序设计语言。
2.Shell环境 :文本编辑器+解释执行脚本的解释器
3.种类:Bourne Shell (user/bin/sh或bin/sh)
Bourne Again Shell (/bin/bash)
C Shell(/user/csh)
K Shell(/user/bin/ksh)
Shell for Root(/sbin/sh)

例子

#!/bin/bash
echo “hello world”

#!是一个约定的标记告诉系统这个脚本需要什么解释器来执行
4.运行Shell脚本的方法
(1)作为可执行程序
chmod +x ./test.sh
./test.sh
(2)作为解释器参数
/bin/sh test.sh
/bin/php test.php
5.Shell 变量
定义变量:your_name=”word”(php中加$)
语句赋值: for file in ‘ls/etc’或for file in ( l s / e t c ) 循 环 输 出 l s / e t c 中 的 文 件 名 获 取 变 量 : (ls/etc) 循环输出ls/etc中的文件名 获取变量: (ls/etc)ls/etcyour_name ${your_name}
只读变量 readonly myUrl
myURl=“xxxxxxxxxx”
删除变量 unset variable_name
变量类型:
局部变量:在脚本或命令中定义,仅在当前shell中有效
环境变量:所有程序都可以访问环境变量。
Shell变量:由shell程序设置的特殊变量。既有局部变量也有环境变量。

Shell字符串
单引号:str=’this is string’
任何字符都会原样输出,单字符串中变量无效。
单引号中只能出现成对出现单引号。
双引号:your_name=’name’
Str=”hello,\”KaTeX parse error: Undefined control sequence: \” at position 10: your_name\̲”̲!\n” 可以出现变量 可以…{str}”#仅双引号 Getstr=”asd,”${str}
获取字符串长度:string=”abcd”
echo ${#string}
提取字符串:string=”acsdaad”
echo KaTeX parse error: Expected 'EOF', got '#' at position 14: {string:1:4} #̲输出2-4 查找字符串:str…string” io` #查找i或o位置
Shell数组:
array_name=(value value value value value)

array_name[0] = value
array_name[1] = value

读取数组: a r r a y n a m e [ 0 ] 使 用 @ 获 取 数 组 获 取 所 有 元 素 : {array_name[0]} 使用@获取数组获取所有元素: arrayname[0]使@{array_name[@]}
获取数组长度:length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]}或…{#array_name[*]}
Shell注释:
单行:# 注释
多行: :<<EOF 注释内容EOF :<<’注释内容’ :<<!注释内容!

6.传递参数

$# 传递到脚本的参数个数
∗ 以 一 个 单 字 符 串 显 示 所 有 向 脚 本 传 递 的 参 数 。 如 " * 以一个单字符串显示所有向脚本传递的参数。 如" "*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

7.基本运算符:(shell不支持简单的数学运算)
算术运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
规则:
表达式之间和运算符之间要有空格 必须被``反引号包围
运算符 说明 举例

  • 加法 expr $a + $b 结果为 30。
  • 减法 expr $a - $b 结果为 -10。
  • 乘法 expr $a \* $b 结果为 200。
    / 除法 expr $b / $a 结果为 2。
    % 取余 expr $b % $a 结果为 0。
    = 赋值 a=$b 将把变量 b 的值赋给 a。
    == 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
    != 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 “*” 不需要转义符号 “” 。
关系运算符:只支持数字不支持字符串除非字符串是数字
-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。
布尔运算符
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。
逻辑运算符
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z a ] 返 回 f a l s e 。 − n 检 测 字 符 串 长 度 是 否 不 为 0 , 不 为 0 返 回 t r u e 。 [ − n " a ] 返回 false。 -n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n " a]falsen00true[n"a" ] 返回 true。
$ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
文件测试符
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。
8.echo命令
echo string
echo “it is string” 或 echo “it is string”
显示结果至指定文件 echo “it is string” > myfile
原样输出字符串 使用单引号 echo ‘ ’
9.printf命令:(不带换行符)
语法:printf format-string [arguments…]
Format-string :格式控制字符串
Arguments:参数列表
printf “%-10s %-8s %-4.2f\n” 郭靖 男 66.1234
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。
转义字符含义
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

10.test命令: test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
11.流程控制
If else语句

if  condition
then
 	Command1
elif condition
then
Command2
  else
Command3
fi

for循环

for var in item1 item2 item3
do
......
done

While 语句

while condition
do
...
done

Until 循环:循环执行一系列命令直至条件为 true 时停止。

until condition
do
......
done

Case esac语句:

case value in
model1)
.....
;;
modell2)
....
;;
*)
.....
;;
esac

12.Shell函数

[ function ] funname [()]
{
    action;
[return int;]
}

可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
函数参数:在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
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

$# 传递到脚本或函数的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
@ 与 @ 与 @*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
13.Shell输入输出重定向
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

14.Shell文件包含
. filename # 注意点号(.)和文件名中间有一空格

source filename

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值