LinuxShell学习笔记(1)

开头先感谢一下借鉴的博客安装oh-my-zsh,配置命令行高亮,命令提示,打造高效终端_oh my zsh-CSDN博客

安装zsh并配置oh-my-zsh插件

今天先配置好了Ubuntu虚拟机,安装zsh
zsh由于ubuntu有库直持,所以直接apt安装即可,如果有需要的话可以先update一下apt,键入:

sudo apt-get update


更新完毕后,键入

sudo apt-get install zsh


安装完毕后输入

cat /etc/shells
如果出现了/bin/zsh,说明安装成功了。
但是这个初始界面说真的比bash还难看好多。那现在就要安装oh-my-zsh来美化一下了

安装oh-my-zsh可以参考上面那篇博客,在此不赘述。

编写第一个程序HelloWorld

这是对于每一个编程小白的第一个代码,向编程世界打招呼,在Linuxshell中需要先键入

vi hello.sh

sh文件的文件名自定,vi是zsh自带的脚本语言,如果想使用vim需要重新安装,在学习过程中发现将bash改为zsh后ifconfig也需要进行重新安装(sudo apt install ifconfig)才能使用。

之后进入hello.sh的文档中写入(进入编辑模式需要输入i)

% echo "Hello World"
Hello World

之后我尝试用了三种方法去访问,1.bash+文件名运行文件;2.相对路径,如./hello.sh;3.绝对路径

变量

zsh 有 5 种变量:整数、浮点数(bash 不支持)、字符串、数组、哈希表;

zsh 的变量多数情况不需要提前声明或者指定类型,可以直接赋值和使用(但哈希表是一个例外)。

注意:等号两边不能有空格

整数与浮点数

变量赋值浮点数
% num1=123.456
变量赋值整数
% num2=204
# 简单的数值计算
% num3=$(($num1 + $num2))
# (( 中的变量名可以不用 $
% num3=$((num1 + num2))

发现问题(数值计算)

但在进行简单的数值计算中,发现在Zsh(或大多数shell环境)中,直接进行数学运算时,如果你遇到浮点数(即带有小数点的数)和整数相加后结果出现很多位小数的情况,这通常是因为shell本身并不直接支持浮点数运算,或者使用的工具(如expr、$((...))等)不支持浮点运算。在Zsh中,虽然它提供了比Bash更丰富的数学功能,但直接进行浮点数运算时仍需要借助外部工具或特定的语法。


解决方法


1. 使用bc命令

bc是一个任意精度的计算器语言,它支持浮点数运算。你可以在Zsh中这样使用它:

zsh
复制
result=$(echo "scale=2; 1.5 + 3" | bc)
echo $result


这里,scale=2表示结果保留两位小数。你可以根据需要调整scale的值。

2. 使用awk命令

awk也是一个强大的文本处理工具,它支持浮点数运算:

zsh
复制
result=$(awk 'BEGIN {printf "%.2f\n", 1.5 + 3}')
echo $result


同样,%.2f表示结果保留两位小数。

3. 使用Zsh的数学函数(如果可用)

虽然Zsh本身不直接支持浮点数运算的内置函数,但你可以通过调用外部程序(如上面提到的bc或awk)来间接实现。

4. 编写自己的函数

如果你发现自己经常需要进行浮点数运算,可以编写一个简单的函数来封装这些命令:

zsh
复制
function add_floats() {
    echo "$1 + $2" | awk 'BEGIN {printf "%.2f\n", $1 + $2}'
}

result=$(add_floats 1.5 3)
echo $result


注意事项


直接在shell中进行复杂的数学运算(特别是浮点数运算)可能不是最高效或最方便的方法。对于复杂的数学计算,考虑使用Python、Perl等脚本语言,它们提供了更丰富的数学库和更直观的语法。
在使用bc或awk时,注意控制精度(如scale或%.2f),以避免不必要的精度损失或过多的数字位数。
在处理浮点数时,要注意浮点数运算的精度问题,因为计算机内部表示浮点数的方式可能导致一些意外的结果(如0.1 + 0.2 != 0.3,在大多数编程语言中都是真的,包括使用bc或awk进行浮点数运算时)。

字符串

注意:双引号里可以使用变量,而单引号不可;

例:

% str3="num is $num1

如果字符串中包含空格等特殊字符,需要加(引号 ),可以是(单引号),也可以是(双引号)
# 如果字符串中包含空格等特殊字符,需要加引号
% str2='abc def'
# 在字符串中可以使用转义字符,单双引号均可
% str4="abc\tdef\ng"
# 简单的字符串操作
% str=abcdef
# 2 和 4 都是字符在数组的位置,从 1 开始数,逗号两边不能有空格
% echo $str[2,4]
bcd
# -1 是最后一个字符
% echo $str[4,-1]
def

变量比较

 注:(( ))用于数值比较等操作;【【 】】用于字符串的比较

(( ))用于数值比较等操作,如果为真,返回1,反之,返回0;

(( 里边可以使用与(&&)或(||)非(!)操作符,同 c 系列语言
% ((num == 1 || num == 2)) && echo good
# 比较字符串要用 [[,内侧要有空格,[[ 的具体用法之后会讲到
# 这里双等号可以替换成单等号,可以根据自己的习惯选用
# $str 两侧不需要加双引号,即使 str 未定义或者 $str 中含空格和特殊符号
% [[ $str == abc ]] && echo good
good
# 可以和空字符串 "" 比较,未定义的字符串和空字符串比较结果为真
# [[ 里也可以用 && || !(与或非三种常见的逻辑运算)
% [[ $str == "" || $str == 123 ]] && echo good

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值