1、linux 下面的换行符是"\n" ,windows 下面的换行符是"\r\n"
shell 的运行方法:
第一种 ./xx.sh 需要有可执行权限
第二种 source xx.sh
第三种 bash xx.sh
2.1 shell 程序hello world 解析
shell 第一行一般都是#!/bin/sh
这行话以#!开始后面+一个pathname ,这行话的意思就是指定shell程序执行时被哪个解释器执行,#!/bin/sh的意思就是这个设立了将被当前系统中/bin目录下面sh可执行程序执行
除了sh我们还可以使用bash来执行该脚本
注意:在ubuntu上面默认使用的解释器sh其实不是bash,而是dash,dash是ubuntu中默认使用的脚本解释器。
2.2.1 变量
(1) 定义和初始化 使用=号进行初始化赋值 在shell中赋值=两边不能使用空格
string=”hello world"
echo $string
(2) 变量赋值
(3)变量引用 。shell中引用符号是$符号,如果后面的定量没有被定义会被识别成一个赋值为空的变量,
$var
v
a
r
在
有
些
情
况
下
只
能
使
用
{var} 在有些情况下只能使用
var在有些情况下只能使用{var}不能使用$var
var="hello"
echo "{var}you"
2.2.2 单引号和双引号的区别
(1) shell 中使用字符串可以不添加双引号,直接使用,而且有空格的时候也可以,但是不能输出像”或者其他转义字符
(2) shell也可以使用单引号输出字符串也可以输出转义字符,字符是什么就输出什么
(3) 双引号,输出转义后的字符(和C语言是一样的)
string=new string
string='new stri"ng'
string="new string\"ng"
2.2.3 调用linux命令
1)直接执行
2) 反引号括起来(ESC 下面的按键下面那个按键)(有时候在我们shell中调用linux 命令是为了得到这个命令的返回值)
2.2.3 选择分支
格式:
if condition
then
command1
command2
…
commandN
else
command
fi
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
3) 判断文件是否存在 -f (-f 后面加的文件不能有空格)
1 #!/bin/sh
2
3 #判断文件a.txt是否存在如果不存在则创建
4 if [ -f a.txt ]
5 then
6 echo "yes"
7 else
8 mkdir a.txt
9 fi
这个不知道为什么一直判断都是不存在
判断目录是否存在 -d
判断字符串是否想等 “string”=“string”
判断数字是否相等 (-eq) 大于 (-gt) 小于 ( -lt) 大于等于 (-ge) 小于等于 (-le)
equal gt greater than lt less than ge greater or equal le less or equal
判断是否为空 -z (注意-z判断是如果变量本身没定义也是不成立)
-o 表示逻辑或 (c 语言中 ||)
简写的if表达式
[ -z $str ] || echo "fei kong"
2.2.4 循环结构
for var in item1 item2 … itemN
do
command1
command2
…
commandN
done
for i in ·ls·
do
echo $i
done
while 循环
while condition
do
command
done
until condition
do
command
done
2.2.5 echo 创建文件和最佳输入文件
创建文件并输入内容的>。 向一个已经存在的文件中追加输入字符使用>>.
echo "test" > a.txt
2.2.5 case 语句
case 值 in
模式1)
command1
command2
…
commandN
;;
模式2)
command1
command2
…
commandN
;;
esac
2.2.6 传参
$# 表示调用该shell是传参的个数 ( $#表示真实的参数个数)
shell source a.sh aa bb cc $# = 3
$0是执行这个设立了程序的解析程序的名称 ,$1第一个有效参数的值,$2第二个有效参数的值,
$0, $1… $n表示各个参数
2.2.7 break ,shift
shell中只用于while循环,所以当while中内嵌case语句,case中的break是跳出外层的while循环的,不是用来跳出case语句的
shift 把我们给shell程序的传参左移了一位 aa bb cc ===> bb cc