Linux 环境编程配置与基础

Linux 环境开发基础


本专栏知识点是通过<零声教育>的系统学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看详细的服务: 链接

环境编程

需要组件

1.安装vmware
2.安装Linux desktop/server
3.安装配置samba
4.安装编辑器 vscode/sourcelnsight
5.ssh操作终端软件 xshell/putty
6.gcc/g++

安装samba

用于主机和虚拟机进行文件传递

sudo apt-get install samba

在Ubuntu上修改配置samba,添加文件夹配置信息
sudo gedit /etc/samba/smb.conf  #格式如下
            [share]
                comment = my samba
                path = /home/pwn/c_code # 共享路径
                browseable = yes
                writable = yes

添加指定用户至smb用户组(具体用户名pwn 请自行修改)

sudo smbpasswd -a pwn

使用上述命令链接即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7cAc0BFB-1687972474077)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16878522465777.jpg)]

linux 环境编程

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 shell 

样例如下:

#!/bin/bash  
echo “Hello World!” # 命令 用于向窗口输出文本。
变量

注意事项:

1> 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2> 中间不能有空格, 可以使用下划线 。
3> 不能使用标点符号。
4> 不能使用 bash 里的关键字(可用 help 命令查看保留关键字)
定义变量

1.定义变量时,变量名不加美元符号($),如:

和其他编程语言类似 ,但是变量等号之间不能有空格  
    a="baidu.com" 
使用变量
直接前面加 $ 符号即可饮用
    b="baidu.com"
    echo $b
    echo ${b} //  效果一样

使用教程 :

do:do 是 for、while 和 until 循环中的关键字,用于标记循环的开始。它指示循环应该执行的一系列操作或语句。
done:done 是 for、while 和 until 循环中的关键字,用于标记循环的结束。它表示循环块的范围结束,所有的循环语句都在此之前。

#!/bin/bash
for file in $(ls /home/); do # 创建for 循环 do标记开始 
	echo "${file}" #中间语句
done  # 标记结束

只读变量 && 删除变量
#只读变量

#!/bin/bash
a="passwd"
readonly a # 设置只读模式,会直接报错
a="ss"

#删除变量

#!/bin/bash
a="passwd"
unset a # 删除变量
echo $a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFgDrJd1-1687972474078)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16878521157644.jpg)]

字符串

注意:(){} 区别
() 可以创建一个子shell,子shell中的命令将在子进程中执行
{} 可以将多个命令组合成一个块,并作为一个单独的命令执行。常见用法是在循环中使用 {} 来定义命令块

单引号

单引号字符串的限制:

str='this is a string'

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号
your_name='0voice' 
str="Hello, I know you are \"$your_name\"! \n" 
echo -e $str

输出结果为:

双引号的优点:

1.双引号里可以有变量
2.双引号里可以出现转义字符

拼接

a="ceshi"
ces="${a} sss"
sd="ssd2 "$a" "


echo $ces
echo $sd
echo $a $ces

注意:写代码一定不要留空格会报错

字符串特殊操作
# 读取长度
dd="sdsdasd"
echo "${#dd}" #    

# 提取字符串
dd="1234565"
echo "${dd:1:3}"

# 查询字符串
ds="sodasjcwois ov bur"
bs=`expr index "$ds" bu` # 输出位置
echo $bs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEgd32CG-1687972474079)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16878737909085.jpg)]

数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0 。

数组名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

也可以单独定义

array[0]=1
array[1]=2
array[2]=3

可以不使用连续的下标,而且下标的范围没有限制。

${数组名[下标]}  #读取数组格式:
echo ${array_name[@]} #符号可以获取数组中的所有元素
array[0]=1
array[1]=2
array[2]=3
array[3]=0
echo ${array[1]}
echo ${array[@]}
echo ${#array[@]}

运行记录

注解
单行
    #
多行
    :<<EOF
        XXXX
    EOF
多行2
    :<<'
    '
多行3
    :<<!
    !
参数传递 && 特殊字符
脚本时,向脚本传递参数,脚本内获取参数的格式为:
$n 。 n 代表一个数字, 
    1 为执行脚本的第一个参数,
    2 为执行脚本的第二个参数,以此类推
$0 为传输文件名

案例如下:

 echo "Shell 传递参数实例!";
 echo "执行的文件名:$0"; 
 echo "第一个参数为:$1"; 
 echo "第二个参数为:$2"; 
 echo "第三个参数为:$3";

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WyecThWS-1687972474080)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16878745402192.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SgYdW1wY-1687972474080)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16878746819901.jpg)]

$* 与 $@ 区别:

    * 相当于传入了一个参数
    @ 相当于传入了多个参数

算数运算符

算数运算和其他编程语句类似 + - / % 是一样的,不同的是需要用 尖括号 + expr 这个单词 去进行计算

案例如下:

val `expr $a + $b`
echo "a + b  $val
关系运算符

支持数字和数字类型字符串
主要用来比大小,和确定返回值
比如: [$? -eq 0] # 接收返回值,判断是否成功

运算符            说明             举例 
    -eq 
        检测两个数是否相等,相等返回 true。
        [ $a -eq $b ] 返回 false。
    


布尔运算&& 文件测试符

a 为 10 ,变量 b 为 20
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dKLOtgX2-1687972474082)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16879316830307.jpg)]

文件测试运算符意思是,判断文件的相关操作,比如是否为空啊 这种
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4QcHq39-1687972474083)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16879318131416.jpg)]

S : 判断某文件是否 socket 。
L : 检测文件是否存在并且是一个符号链接。
。
变量 file 表示文件 home /king/test.sh 
字符串运算符

test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPhQridE-1687972474084)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16879321402642.jpg)]
字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RYxiFw8-1687972474085)(https://tuc-1259775406.cos.ap-nanjing.myqcloud.com/2023/06/29/16879322568206.jpg)]

num1=100
num2=100 
if test $[num1] -eq $[num2] 
then
    echo '两个数相等!' 
else 
    echo '两个数不相等!' 
fi
SHELL流层面
if / else
if xxx
then 
    1
    2
    3
    
fi

也可以写成一行

if xxx;then xx;fi
if XXX
then
    1
    2
    3
elif xx
    1
    2
else
    1
fi 
for 循环
    for var in test1 test2
    do
        com1
        com2
    done    
案例
#优化检验内网IP是否在使用 
#!/bin/bash
ip="192.168.124"
for i in {1..50};do 
	ping -c 3 -i 0.1 -W 5 $ip.$i &>/dev/null
	if [ $? -eq 0 ]; then
		echo "${ip}.$i up"
	else
		echo "${ip}.$i down"
	fi
done


案例2
 a=$1
ifconfig | grep -A 3 "$a" | grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" | head -n 1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值