用户组
添加用户组
# 格式:groupadd -g 用户组id 用户组的名称
若不指定id,则按默认的来(1000开始,1-999是系统文件的id)
修改用户组
# 格式: groupmod [-g 用户组id] 用户组名称
删除用户组
# 格式: groupdel 用户组名称
用户
添加用户
# 格式: useradd [-G 用户组的名称或者id] [-u 用户的id] [-c 注释] [-s shell解释器] 用户名
# 注意:[] 里面的都是可写可不写的,shell解释器就是表明它是否有登录的权限,默认是有的 /bin/bash, /sbin/nologin 是没有登录权限
修改用户
# 格式: usermod [-G 用户组的名称或者id] [-u 用户的id] [-c 注释] [-s shell解释器] 用户名
删除用户
# 格式1: userdel 用户名
# 格式2: userdel -r 用户名 ---> 这种方式会连家目录和邮件一起删掉
第一个shell脚本
#!/bin/bash
echo "hello world"
echo $name $age $gender
注释
-
单行注释:#
-
多行注释:
# 特殊的多行注释 # end of file :<<EOF 注释内容... 注释内容... 注释内容... EOF :<<! 注释内容... 注释内容... 注释内容... !
变量
基本使用
# 在命令行进行变量的赋值,举例如下:
name=苏沐橙
age=18
gender="女"
# 这种变量其实是局部变量,可以用export导入变量使之成为全局变量,如果没有导入,上面的脚本并不会打印出name,age,gender的信息
上面是对变量赋值进行一个简单举例,这里有几个关键点需要注意下
- 变量赋值:变量名=变量值 【注意:等号两边不可以有空格】
- 使用变量:$变量名,建议使用这种写法:$
删除变量
# 删除变量
unset 变量名
常量
# 用readonly修饰的变量是常量,不可以用unset进行删除
# 两种声明方式
readonly name=苏沐橙
# 或者
name=苏沐橙
readonly name
# 删除方式
# 删除之前,我们先安装一下必要的工具:gdb
yum install gdb -y
[root@master soft]# cat << EOF | gdb
> attach $$
> call unbind_variable("x")
> detach
> EOF
基本数据类型
数字类型
# int整型
定义:age=18
用于标识:年龄,等级,身份证号,qq号,个数
# float浮点型
定义:salary=30000.0
用于标识:工资,身高,体重
字符串类型
#在shell中,加了引号的字符就是字符串类型
定义:name='xiaohu'
用于标识:描述性的内容,如姓名,性别,国籍,种族
# 注意1:字符串包含空格必须加引号
[root@master soft]# msg="hello xiaohu"
[root@master soft]# msg=hello xiaohu
bash: xiaohu: 未找到命令...
# 注意2:连续的字符不加引号包含也是可以的,但我们还是强烈建议加上引号,规范一些
[root@master soft]# msg=hello
[root@master soft]# echo $msg
hello
[root@master soft]#
# 注意3:单引号与双引号是不同的
" " 弱引用,引号的特殊字符有意义
' ' 强引用,引号内所有特殊字符都取消意义
[root@master soft]# name=“xiaohu”
[root@master soft]# echo "${name} is good"
xiaohu is good
[root@master soft]# echo '${name} is good'
${name} is good
数组类型
=================声明普通数组=================
# 方式一:array=(元素1 元素2 元素3)
arr1=(1 2 3 4 5 6 7 8 9 10)
# 方式二:array=([key1]=value1 [key2]=value2 [key3]=value3)
arr2=([0]=11 [1]=22 [2]=33 [3]=44)
# 方式三:依次赋值
[root@master exer]# arr2[0]=111
[root@master exer]# arr2[1]=222
[root@master exer]# arr2[2]=333
[root@master exer]# arr2[3]=444
[root@master exer]# arr2[6]=666
# 方式四:利用执行命令的结果设置数组元素:array=($(命令)) 或者 array=(`命令`)
arrdate=(`date`)
# ps:查看声明过的数组
declare -a
# 结果如下:
declare -a arr1='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5" [5]="6" [6]="7" [7]="8" [8]="9" [9]="10")'
declare -a arr2='([0]="111" [1]="222" [2]="333" [3]="444" [6]="666")'
declare -a arrdate='([0]="2024年" [1]="12月" [2]="11日" [3]="星期三" [4]="17:21:37" [5]="CST")'
=================访问普通数组=================
# 正向索引
[root@master exer]# echo ${arr1[2]}
3
# 负向索引
[root@master exer]# echo ${arr1[-2]}
9
# 打印数组的全部信息
[root@master exer]# echo ${arrdate[*]}
2024年 12月 11日 星期三 17:21:37 CST
=================访问关联数组=================
declare -A info # 必须要先声明一下关联数组,才能进行赋值
[root@master soft]# info=(["name"]="xiaohu" ["age"]=18 ["gender"]="male")
[root@master soft]# echo ${info[0]}
xiaohu
[root@master soft]# echo ${info["age"]}
18
[root@master soft]# echo ${info["gender"]}
male
相关功能【字符串】
切片
# 格式:字符串名称:起始位置:长度
str="abcdefghijklmn"
echo ${str:3:4} # defg
长度
# 格式: #字符串
str="abcdefghijklmn"
echo ${#str} # 14
截断【截掉】
"===========================左截断=============================="
用 # 截断相应的字符串,注意,左截断,所以一定是从开头开始,一旦匹配到相应的字符串,从当前位置到开头全部砍掉
str="www.baidu.com"
echo ${str#"www"} # .baidu.com
用 #* 截断相应的字符串,但是尽可能地少截断
str="www.baidu.com"
echo ${str#*"w"} # ww.baidu.com
用 ##* 截断相应的字符串,但是尽可能地多截断
str="www.baidu.com"
echo ${str##*"w"} # .baidu.com
"===========================右截断=============================="
用 % 截断相应的字符串,注意,右截断,所以一定是从末尾开始,一旦匹配到相应的字符串,从当前位置到末尾全部砍掉
str="www.baidu.com"
echo ${str%"com"} # www.baidu.
用 %* 截断相应的字符串,但是尽可能地少截断
str="www.baidu.com"
echo ${str%"."*} # www.baidu
用 %%* 截断相应的字符串,但是尽可能地多截断
str="www.baidu.com"
echo ${str%%"."*} # www
注意:左截断, * 在要匹配的字符串的左边,而右截断,它的 * 要在要匹配的字符串的右边
数值的运算
整数的运算
# 第一种方式: $[]
echo $[3+4] # 7
echo $[3-4] # -1
echo $[3*4]
echo $[3/4]
echo $[3%4]
echo $[3*4]
# 第二种方式: $(())
echo $((3+4))
echo $((3-4))
echo $((3*4))
echo $((3/4))
echo $((3%4))
echo $((3**4))
# 第三种方式: expr # 操作数与操作符之间必须要有空格
expr 3 + 4
expr 3 - 4
expr 3 \* 4 # 注意:这里需要进行转义,因为 * 在shell里面有特殊含义
expr 3 / 4
expr 3 % 4
# 第四种方式: let # 只支持赋值运算
let a+=3
let a-=3
let a*=3
let a/=3
let a%=3
小数运算
# 首先:安装 bc
yum install bc -y
res=`echo "1.2+1.3" | bc`
echo $res # 2.5
第二个shell脚本
#!/bin/bash
echo '下面是一个程序的测试结果:'
read -p "请输入你的家庭户住址:" address
echo "我的家庭住址是:$address"
echo '====================$n====================='
echo '这是脚本名:$0 = ' $0
echo '这是第一个参数:$1 = ' $1
echo '这是第二个参数:$2 = ' $2
echo '这是第三个参数:$3 = ' $3
echo '====================$#====================='
echo '参数的总个数是:$#'
echo '====================$?====================='
echo '验证上一条命令是否执行成功' $?
程序分析
# 首先看第一行
#!/bin/bash 这是shell解释器的意思
# 第二行 输出语句打印如下信息:
下面是一个程序的测试结果:
# 第三行 read 这是交互传值,类似python的input(),而 -p:指定读取值时的提示符
由我们输入一个值然后传给address
# $n,就是 $与数字结合
$0:表示脚本名 $1:表示我们传进去的第一个值......$n:以此类推
# $# 获取参数的总个数
# $? 返回上一步的执行情况,如果是0,则说明成功运行没有错,否则是出错了
标签:soft,用户组,echo,第二天,初学,master,str,Linux,root
From: https://www.cnblogs.com/ajnq-fz/p/18600731