0%

Linux初步学习(一)

Linux初步学习(一)

菜鸟教程入口:
https://www.runoob.com/linux/linux-tutorial.html

shell

https://www.runoob.com/linux/linux-shell-variable.html

  • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

  • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

  • Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

shell脚本的扩展名为.sh

  • 指定shell 解释器

#!/bin/bash

#!符号后面指定

  • 运行脚本

    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh #执行脚本
  • 注意此处运行的时候必须写成./文件名的形式,直接写的话Linux会去Path里面寻找这个文件,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

  • 或者作为解释器参数传给解释器以进行运行

    /bin/sh test.sh

第一个shell程序

#!/bin/bash
echo "Hello World !"

echo是控制台输出

image-20220102115757607

shell 变量

  • 变量名不能有$

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  • 中间不能有空格,可以使用下划线 **_**。

  • 不能使用标点符号。

  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

变量赋值

显式=,或者

for file in `ls /etc`
或者
for file in $(ls /etc)

以上语句将 /etc 下目录的文件名循环出来。

变量使用

  • 使用一个定义过的变量,只要在变量名前面加美元符号即可
your_name="qinjx"
echo $your_name
echo ${your_name}

花括号的作用是提示编译器这是个变量名

比如

for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

  • 加上:image-20220102121030726

  • 不加但是加了空格:

  • image-20220102121227839

花括号加不加都行,不加的时候注意用空格区分开

变量只读

  • 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"

变量删除

unset variable_name

变量类型

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

字符串

单引号

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

双引号

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

字符串拼接

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
  • 直接拼接,不需要逗号或者加号等

子字符串

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

查找字符串

string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
  • 注意上面的expr…是反引号,不是单引号

字符串长度

string="abcd"
echo ${#string} #输出 4

字符串长度的其他方法

string="hello,everyone my name is xiaoming"
expr length "$string"

image-20220102142331661

输出6

数组

数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
array_name=(
value0
value1
value2
value3
)

单独定义变量

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

读数组内容

${数组名[下标]}
valuen=${array_name[n]}

取得数组全部内容

echo ${array_name[@]}

取得数组长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

注意,可能数组会出现image-20220102141720725这是因为 ubuntu 模式使用的是 dash 模式,如果不想报错使用 bash 模式

的报错,此时使用命令 bash xxx.sh 或者 将脚本第一行改为 *#!/bin/bash,执行./example.sh也可以

输出数组长度的时候可能不对,此时输出的是1

image-20220102142013809

此时也是1

image-20220102142050921

此代码的输出为

array=(0,1,2,3,4,5,6)
echo ${#array[@]}
echo $array
echo ${array[*]}

image-20220102142905800

  • 可以通过给数组设置下标范围以外的单元的内容来增加数组的长度

注意,使用指定下标修改数组比如array_name[0]=value0会丢弃该下标后面的其他内容

注意,代码不能随意包含空格,比如等号两边,可能会引起错误

字符串截取

参考 https://www.runoob.com/linux/linux-shell-variable.html 第一篇笔记

读取用户输入

read [-options] [variable...]
read -p "input a val:" a    #获取键盘输入的 a 变量数字
read -p "input b val:" b #获取键盘输入的 b 变量数字
r=$[a+b] #计算a+b的结果 赋值给r 不能有空格
echo "result = ${r}" #输出显示结果 r

shell注释

# 开头的行就是注释,会被解释器忽略。

  • 多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF

或者任何符号

:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!