文章目录
1 基础命令
清空命令行:reset
文件操作:
显示列表
ls -l
# 所有
ls -la
# 通配符查找
ls -l ja*
创建文件
touch today.c
复制文件
cp src.txt dest.txt
# 询问
cp -i src.txt dest.txt
# 复制到当前目录
cp src.txt .
# 复制整个目录到指定路径
cp -R 目录 dest
# 通配符复制到上级目录
cp c_?1 ../
删除文件
rm file
删除目录
rm -rf 目录
查看文件类型:
file 文件
查看文件内容:
cat file
cat -n file 显示行号
查看文件最后10行
tail -n 10 file
# 查看文件最开始的10行
head -n 10 file
创建用户
# 创建用户的同时,创建了home目录
useradd -m jack
# 删除用户
userdel -r jack
创建组
groupadd androidgroup
# 分配用户到组
usermod -G androidgroup jack
文件权限
r读 w写 x执行
drwxr-xr-x
d rwx r-x r-x
d目录
1.文件所属用户具备的权限(root对该文件具备读写执行权限)
2.文件所属用户的所属组具备的权限(读、执行)
3.系统的其他用户具备的权限(读、执行)
rwx必须是固定顺序
权限 二进制 八进制
— 000 0
–x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
修改文件权限
chmod 644 file
# 给用户加上执行权限
chmod u+x file
改变创建目录的默认权限
umask 026
777-026
改变文件的所属
chown user.group file
chown user file
chown .group file
----------------------shell脚本
输出 echo
#!/bin/bash
NDK=10
text="i love shell"
#命令的执行结果的输出作为变量的值
text1=`date`
text2=$(who)
echo $NDK
echo $text
echo "$text very much"
echo "\$NDK"
echo $text1
echo $text2
命令执行退出的状态:
0 成功
127 没有找到命令
1 未知错误
126 命令不可执行
只有if命令的退出状态码为0,才会执行then部分
if 命令
then
命令
fi
test数值比较
-gt
-eq 等于
-le
-ne 不等于
test字符串比较
str1 == str2
str1 != str2
str1 < str2
-n str1 长度是否非0
-z str1 长度是否为0
文件比较
-d 检查是否存在,并且是一个目录
-e 检查file是否存在
-f 检查是否存在,并且是一个文件
-r 检查是否存在,并且可读
-w、-x
file1 -nt file2 file1比file2新
file1 -ot file2 file1比file2旧
case命令
case 变量 in
pattern1) 命令;;
pattern2) 命令;;
*) 默认命令;;
esac
```s
for命令
```shell
for var in list
do
命令
done
while命令
while test command
do
命令
done
2 demo
2.1 demo-1
#!/bin/bash
NDK=10
text="i love shell"
#命令的执行结果的输出作为变量的值
text1=`date`
text2=$(who)
echo $NDK
echo $text
echo "$text very much"
echo "\$NDK"
echo $text1
echo $text2
#输出重定向
ls -al > test2
#输入重定向
wc < test3
2.2 demo-2
#!/bin/bash
a=10
b=20
#expr命令
c=$(expr $b / $a)
#方括号
d=$[$a * 2]
#bc 浮点数计算
#| 管道,一个命令的输出作为另外一个命令的输入
#scale是自带的内建变量
e=$(echo "scale=4; $a / 3" | bc)
#内联输入重定向
f=$(bc << EOF
scale=4
a1 = ($a * $b)
a1 / 3
EOF
)
echo "c:$c"
echo "d:$d"
echo "e:$e"
echo "f:$f"
#!/bin/bash
a=10
b=2
c=$[$a / $b]
echo result is $c
var1=20
var2=3.1333
var3=$(echo "scale=4; $var1 * $var2" | bc)
echo result is $var3
#退出状态码
exit 5
2.3 demo-3
#!/bin/bash
echo "my shell exit"
exit 5
2.4 demo-4
#!/bin/bash
testuser=lady
#
if grep $testuser /etc/passwd
then
echo "ok"
ls -a /home/$testuser/
#
elif ls -d /home/$testuser
then
echo "用户不存在,主目录仍然存在"
#
else
##嵌套if
#if
#then
echo "$testuser not exist"
fi
#!/bin/bash
testuser=jack
#if 条件状态码必须是0
if grep $testuser /etc/passwd
then
ls -a /home/$testuser/
echo
else
echo $testuser not exist
fi
2.5 demo-5
#!/bin/bash
#test命令,如果条件成立,test命令已状态为0退出,if条件成立
if test $var
then
echo "test条件成立"
else
echo "test条件不成立"
fi
2.6 demo-6
#!/bin/bash
a=10
b=5
#test命令简单形式
if [ $a -gt $b ]
then
echo "$a greater than $b"
else
echo "$a smaller than $b"
fi
#!/bin/bash
if [ $a -eq $b ]
then
echo "$a equal $b"
else
echo "$a smaller than $b"
fi
2.7 demo-7
#!/bin/bash
str1=""
if [ str1 = "" ]
then
echo "有内容"
else
echo "没内容"
fi
#!/bin/bash
testuser=ricky
if [ $USER = $testuser ]
then
echo "welcome $USER"
elif [ $USER = "jack" ]
then
echo "hello jack"
else
echo "bye"
fi
2.8 demo-8
#!/bin/bash
mydir=/usr/jason
#-d检查目录是否存在
if [ -d $mydir ]
then
echo "$mydir exist"
cd $mydir
ls
else
echo "mydir not exist"
fi
2.9 demo-9
#!/bin/bash
#多个条件 []
mydir=/usr/jason/shell
#任意数学赋值或者比较表达式
#if (( a++ > 90 ))
if [ -d $HOME ] && [ -w $mydir ]
then
cd $mydir
touch test5
else
echo "no"
fi
2.10 demo-10
#!/bin/bash
testuser=rose
case $testuser in
rose)
echo "hi,$testuser";;
ricky)
echo "hello, ricky";;
*)
echo "defaults";;
esac
#!/bin/bash
testuser=tom
case $testuser in
jack | rose)
echo "hello, $testuser";;
ricky)
echo "hi, $ricky";;
*)
echo "others";;
esac
2.11 demo-11
#!/bin/bash
list="Mother\'s Father Brother"
list2="windows--linux--macos"
#IFS字段分隔符
IFS=$--
for item in $list2
do
echo $item
done
2.12 demo-12
#!/bin/bash
a=10
while [ $a -gt 0 ]
do
echo "num:$a"
#赋值不用使用$符号
a=$[ $a - 1 ]
if [ $a -eq 5 ]
then
echo "break"
break
fi
done