在终端输出Hello World 交互模式
写出shell脚本hellowworld,分别使用zsh和bash解释器,增加权限并执行
1.创建hello_bash.sh文件 touch hello_bash.sh
2.打开hello_bash.sh文件,在文件内输入命令echo "Helloworld from bash"
3.增加执行权限,chmod +x hello_bash,sh
4.执行脚本,./hello_bash,sh
zsh 有 5 种变量:整数、浮点数(bash 不支持)、字符串、数组、哈希表。Zsh 的变量多数情况不需要提前声明或者指定类型,可以直接赋值和使用。
给变量num1赋值整数123,请写出赋值语句
给变量num1赋值浮点数123,请写出赋值语句
给变量str1赋值字符串abcde,请写出赋值语句
如果字符串中包含空格等特殊字符,需要加(引号 ),可以是(单引号),也可以是(双引号)
str2='abc def'
有单引号和双引号有什么区别?
双引号可以使用变量而单引号不行。
num=123, 使用变量str3表示 num is 123,写出字符串使用变量表达式
num1=1,num2=2,num3=num1+num2,求num3。
字符串str=abcdef,求第二到第四的字符和最后一次字符。
(( )) 用于数值比较等操作,如果为真返回 0,否则返回 1
&& 后边的语句在前边的语句为真时才执行
注意这里只能使用双等号来比较
双括号里边可以使用与(&&)或(||)非(!)操作符,同 c 系列语言
比较字符串要用 [[,内侧要有空格
循环语句
while [[ ]] {
break/continue
}
# 样例 死循环
while ((1)) {
echo good
}
until
和 while
相反,不满足条件时运行,一旦满足则停止
until [[ ]] {
}
for
循环主要用于枚举,这里的括号是 for
的特有用法,不是在子 shell 执行。括号内是字符串(可放多个,空格隔开)、数组(可放多个)或者哈希表(可放多个,哈希表是枚举值而不是键)。i
是用于枚举内容的变量名,变量名随意。
# 格式
for i ( ) {
}
# 样例
for ((i=0; i < 10; i++)) {
echo $i
}
repeat
语句用于循环固定次数,n
是一个整数或者内容为整数的变量。
repeat n {
}
分支逻辑用 if
也可以实现,但 case
更适合这种场景,并且功能更强大。
# 格式 + 样例
case $i {
(a)
echo 1
;;
(b)
echo 2
# 继续执行下一个
;&
(c)
echo 3
# 继续向下匹配
;|
(c)
echo 33
;;
(d)
echo 4
;;
(*)
echo other
;;
}
;;
代表结束 case
语句,;&
代表继续执行紧接着的下一个匹配的语句(不再进行匹配),;|
代表继续往下匹配看是否有满足条件的分支。
select
语句是用于根据用户的选择决定分支的语句,语法和 for
语句差不多,如果不 break
,会循环让用户选择。
# 格式
select i ( ) {
}
# 样例
select i (aa bb cc) {
echo $i
}
输出是这样的。
1) aa 2) bb 3) cc
?#
按上边的数字加回车来选择。
异常处理语句
# 格式
{
语句 1
} always {
语句 2
}
无论语句 1 是否出错,都执行语句 2。
获取字符串的长度:
字符串拼接:
“str2+=$str1” 通常表示将字符串str1
的值追加到字符串str2
的末尾,并将结果重新赋值给str2
。
字符串切片:逗号前后不能有空格。字符位置是从 1 开始算起的。
字符串截断
#是从字符串的左往右删,%是从字符串的右往左删
字符串查找
str=abcdef
echo $str[(I)cd]
3
遍历字符
字符串替换
bc替换成ef
str=abcabc
echo ${str/bc/ef}
aefabc
删除字符串
替换字符串
删除所有匹配到的字符串
只替换开头的字符串
替换结尾的字符串
如果匹配到了则输出空字符串
如果匹配不到,则输出原字符串
加(M)后效果反转
按位置删除字符,删除第一个字符
删除多个字符
按位置替换字符。