1. 对于计算机的访问
1.1 目录
ls /home/che 会显示出che目录下的文件和目录
ls / 根目录下的文件和目录
ls -l 详细模式查看,例如文件所有者
pwd 当前所在目录路径
cd /home/che 切换到/home/che
cd ~ 切换到主目录
cd .. 返回上一级
#绝对路径:/home/che/test
#相对路径:最前面不是/或~,例如cd test
1.2 开关机
shutdown -h now (⽴刻进⾏关机)
shutdown -h 1 (1分钟之后关机)
shutdown -r now (现在重新启动计算机)
1.3 Root
切换用户,家目录跟着改变。
根目录是根源,每个用户都能操作
根目录下有许多家目录,你在哪个家就能访问哪个家
su root #然后输入root的密码,验证成功即可切换到root用户。
useradd -m 用户名 #添加用户
passwd 用户名 #设置用户密码
1.4 mkdir 创建目录
mkdir 要创建的目录 创建目录
mkdir /home/tom home文件夹下多了一个tom文件夹
mkdir -p /home/tony/lisa这样就可以创建多级目录
rmdir 要删除的空目录
#目录下无文件无文件夹时可以删除,否则报错。
rm -rf /home/tony r代表递归的删除目录下的所有文件和文件夹 f代表强制
1.5 touch创建空文件 cp拷贝文件
touch 文件名 称创建空文件
touch /home/che/cluster1.py。可以把文件创建到指定的目录下
cp 原文件 指定目录 拷贝文件到指定目录
cp /home/che/cluster1.py /home/che/test 也可以
1.6 chown 修改文件所有者
首先看各文件目录属性
chown 用户名 文件名 修改文件的所有者
sudo chown james cluster3.py
sudo chown -R james 同时修改⽬录和⽬录下⽂件的所有者
1.7 groupadd 创建组 用户放入组 charp修改文件所在组
groupadd 组名 创建组
useradd -g monster -m fox 把fox用户放入组monster中
id fox 可以看到fox的组为monster,fox为创建的,再给fox上密码,就完成了fox的创建
chgrp 组名 文件名 修改文件所在组
1.8 rwx
作用到文件:
[ r ]代表可读(read) 验证:cat hello.py
[ w ]代表可写(write):可以修改。但是不代表可以删除该⽂件,删除这个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
[ x ]代表可执行(execute)
che用户并没有执行权限执行python3户并没有执⾏权限执⾏python3 hello.py,发现可以打印出结果,并没报错,这是因为python3是解释器,只需要有读的权限,就可以执行hello.py
如果不用python3解释器,简单来说,需要两步:
1.编辑hello.py⽂件,并在开头加上#!/usr/bin/python3;
2.执⾏./hello.py。执行后,会出现报错,权限不够。这是因为che⽤户并没有执行权限。
rwx作用的目录:
rwx作⽤到⽬录
[ r ]代表可读(read):可以读取,ls -l查看⽬录内容
[ w ]代表可写(write):可以修改,在⽬录内,创建+删除+重命名⽂件/⽬录
[ x ]代表可执⾏(execute):可以进⼊该⽬录。
#可以⽤数字表示:r=4, w=2, x=1。因此rwx=4+2+1=7。
1.9 chmod修改属性
下⾯将提到u、g、o、a,其中,u:所有者;g:所在组;o:其他⼈;a:所有⼈(u、g、o的总和)
chmod u=rwx,g=rx,o=x ⽂件/⽬录名;
r=4,w=2,x=1,rwx=4+2+1=7。chmod u=rwx,g=rx,o=x ⽂件/⽬录名,相当于chmod 751 ⽂件/⽬录名。
chmod o+w ⽂件/⽬录名
chmod a-x ⽂件/⽬录名 对于所有⼈,都失去了x权限
chmod a+x hello.py,会发现,hello.py⽂件,对于所有⼈,都增加了x权限(可执⾏)。
2.0 作业测试:
1.登录Linux系统后,打开终端,切换到root⽤户。
2.使⽤root⽤户,添加⼀个新⽤户,并且给新⽤户修改密码。
3.注销当前登录账号,并使⽤新⽤户登录Linux系统。
4.使⽤命令关机。
一、文件目录
1). 先进入到主目录
2). 创建/home/用户名/bigdata/linux目录,然后进入到/home/用户名/bigdata/linux目录中,创建hello.py的文件
3). 将hello.py文件复制到/home/用户名/test目录中。
二、用户管理
1).使用root用户,在/home/用户名/test, 目录中创建一个linux.py的文件
2).退出root用户
3).将linux.py文件的所有者从root改为当前用户。(当前用户是什么意思呢?比如:我的虚拟机名称为che,那么退出root用户后,我的当前用户应该就变为了che)
1.使⽤root⽤户创建⼀个⽂件hello1.py;
2.查看hello1.py⽂件的所有者和所在组;
3.将hello1.py⽂件的所有者修改为fox(当然了也可以修改为其他⽤户);
4.将hello1.py⽂件的所在组修改为monster(当然了也可以修改为其他组)。
(1).使⽤touch指令先创建⼀个hello.py⽂件,然后给hello.py⽂件的所有者读、写、执⾏的权限,给所在组读、执⾏权限,给其它⼈读、执⾏权限。
(2).给hello.py⽂件的所有者去除执⾏的权限,增加所在组写的权限。
(3).给hello.py⽂件的所有⽤户添加写的权限。
到⽬前为⽌我们已经掌握了创建⽤户,创建组,以及修改权限。
(1).使⽤root⽤户,创建⼀个组monster,并且为这个组创建两个⽤户:fox,tiger。
(2).切换到che⽤户,并切换到家⽬录,创建⼀个空⽂件practice.py⽂件,并编辑该⽂件,内容可以⾃定义。
(3).使得che⽤户,对该⽂件有rwx权限。
(4).修改该⽂件的组为monster,并使得monster组对该⽂件也有rwx权限。
(5).切换到fox⽤户,通过./practice.py或者/home/⽤户名/practice.py的⽅式,执⾏practice.py⽂件。
2. Shell编程
2.1脚本的创建
2.2 vim编辑
2.3 脚本的运行
基本语法:./文件名
2.4 Shell的变量
系统变量 $:
$HOME、$PWD、$SHELL、$USER等等,⽐如:echo $HOME等等
⽤户⾃定义变量:
2.5 变量命名规则
2.6位置参数变
运算符:
⼀、$((运算式)): $(())
⼆、$[运算式]
三、expr m + n
1.expr后⾯的运算符之间要有空格。⽐如:expr 2 + 3 的意思是 2 + 3 ;
2.7 if判断语句
[ condition ]为判断语句。注意:condition前后要有空格。⾮空返回
常用判断条件
1. =
2. -lt -eq -gt -ne
练习:
Remake:
2.8 case语句
基本语法:
匹配多个条件
#!/bin/bash
read -p "请输⼊⼀个数字(1~5):" num
case $num in
1|2|3)
echo "你输⼊的数字是1、2或3"
;;
4|5)
echo "你输⼊的数字是4或5"
;;
*)
echo "输⼊的数字不在1~5之间"
;;
esac
模糊匹配
#!/bin/bash
read -p "请输⼊⼀个⽂件名:" filename
case $filename in
*.txt)
echo "该⽂件是⽂本⽂件"
;;
*.sh)
echo "该⽂件是Shell脚本⽂件"
;;
*.pdf)
echo "该⽂件是PDF⽂件"
;;
*)
echo "该⽂件不是⽂本、Shell脚本或PDF⽂件"
;;
esac
read -p ''输出显示的语句'' 赋给哪个变量
2.9 if语句中的and和or
1 and &&
#!/bin/bash
read -p "please enter your score: " score
if [ $score -ge 90 ];then
echo "greater"
elif [[ $score -ge 60 && $score -lt 90 ]];then
echo "pass"
else
echo "fail"
fi
2 or ||
#!/bin/bash
read -p "please enter your score: " score
if [ $score -ge 90 ];then
echo "greater"
elif [[ $score -ge 60 || $score -lt 50 ]];then
echo "pass"
else
echo "fail"
fi
2.10 随堂练习
先自己码,功能可以实现再看答案。
#!/bin/bash
A=$1
B=$2
read -p "please enter your number: " nums
case $nums in
1)
C=$[$A+$B]
;;
2)
C=$[$A*$B]
;;
3)
C=$[$A-$B]
;;
*)
echo "we only accept nums 1 2 or 3"
exit
;;
esac
if [ $C -lt 0 ];then
echo C=$C
echo "C is less than zero"
elif [ $C -gt 0 ];then
echo C=$C
echo "C is greater than zero"
else
echo C=$C
echo "C is equal to zero"
fi
2.11 for循环
基本语法⼀
基本语法⼆
2.12 while循环
基本语法
read -p "please enter a year: " year
one=$[$year%4]
two=$[$year%100]
three=$[$year%400]
while [[ $one -eq 0 && $two -ne 0 ]] || [[ $three -eq 0 ]]
do
echo "$year is runnian"
read -p "please enter a year: " year
one=$[$year%4]
two=$[$year%100]
three=$[$year%400]
done
2.13 函数
基本语法
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
getSum 1 2
如何给getSum函数传⼊动态的参数呢?
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
getSum $n1 $n2
如何接收getSum函数的返回值呢?
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo "$1 plus $2 equal to $SUM"
}
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
#把getSum函数的返回值赋值给result
result=`getSum $n1 $n2`
echo "result value is: $result"
#!/bin/bash
getSum(){
#$1和$2代表传⼊的参数
SUM=$[$1+$2]
echo $SUM
}
getMultiply(){
MUL=$[$1*$2]
echo $MUL
}
while true
do
read -p "please enter your selection: " sel
if [ $sel == "sum" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getSum $n1 $n2`
echo result=$result
elif [ $sel == "mul" ];then
read -p "please enter a num n1: " n1
read -p "please enter a num n2: " n2
result=`getMultiply $n1 $n2`
echo result=$result
else
echo "byebye"
exit
fi
done
if
条件中,将 "$dd"="sum"
改为 "$dd" = "sum"
。注意等号两边的空格,这是正确的字符串比较语法。
2.14 题目练习
第⼀题
for line in `cat "grades.txt"`
do
echo $line
done
read -p "please enter your name: " name
for line in `cat "grades.txt"`
do
echo $line
if [ $name == ${line%:*} ];then
echo "$name exit in txt file"
fi
done
完整代码:
#!/bin/bash
manage_grades() {
local file="grades.txt"
read -p "请输⼊学⽣姓名: " name
while true
do
found=0
for line in `cat "grades.txt"`
do
if [ $name == ${line%:*} ];then
found=$[$found+1]
fi
done
if [ $found -ge 1 ];then
read -p "该姓名已经存在,请重新输⼊学⽣姓名:" name
else
break
fi
done
read -p "请输⼊学⽣成绩: " score
echo "$name:$score" >> "$file"
echo "所有学⽣信息如下:"
cat "$file"
}
echo "欢迎进⼊学⽣成绩管理系统!"
for ((i=0;i<=1;i))
do
manage_grades
read -p "是否退出系统?(输⼊ 'yes' 退出,其他任意键继续): " choice
if [[ $choice == "yes" ]]; then
echo "系统已退出,再⻅!"
exit
fi
echo "返回到主菜单..."
done
2.15练习
第一题:
编写一个 Shell 脚本,使用 for 循环计算 1 到 100 中所有偶数的和,并输出结果。
要求:
-
使用 for 循环计算偶数的和。
-
输出结果应该只包含一个数字,即 1 到 100 中所有偶数的和。
第二题:
编写一个 Shell 脚本,使用 for 循环输出 1 到 10 的数字,但如果数字能同时被 3 和 5 整除,则输出 "ThreeFive",如果只能被 3 整除,则输出 "Three",如果只能被 5 整除,则输出 "Five",否则输出数字本身。
第三题:
编写一个Shell脚本,使用for循环遍历从命令行传入的参数。
要求:
-
可以判断参数为奇数还是偶数;
-
可以判断参数是否为数字。