1.新建shell文件
vi adduser.sh
#指定shell版本
#!/bin/bash
#添加用户
adduser test
#设置密码
passwd test
2.直接运行
chmod +x testshell.sh
直接运行 ./testshell.sh
3.sh命令运行
sh testshell.sh 或者bash testshell.sh
sh软链接其实指向bash
以调试模式执行
sh -x testshell.sh
4.将错误信息输出到日志2>
adduser test 2>/usr/local/shelltest/err.log
如果已经添加该用户将会提示用户已经存在
5.免交互处理 &> 将不会打印提示信息
adduser test &>/dev/null
6.顺序分割;
mkdir /usr/local/docker;cd /usr/local/docker
7.逻辑与&&
make && make install 前面的make失败,make install将不会执行
8.逻辑或||
echo ‘hello’||echo ‘hi’
只有前面失败了才会执行后面一条
9.管道|
find /etc -type f | wc -l
找到/etc下面的文件类型,通过管道wc 计算文件数量
10.重定向
标准输入 /dev/stdin 文件描述号0
标准输出 /dev/stdout 文件描述号1
标准错误输出 /dev/stderr 文件描述号2
<重定向输入,>重定向输出 >> 追加
echo “hello”> /usr/local/test.txt
echo “world”> >/usr/local/test.txt
- 将命令行执行错误信息保存到文件
2 >> 同2>,只是2>>是追加而不是覆盖
ls /rootx 2> /usr/local/shelltest/err.log
ls: 无法访问/rootx: 没有那个文件或目录 错误日志将被打印到err.log
&>相当于>和2>
11.定义变量及引用变量$
变量名称字母,数字,下划线 ,不能数字开头
x=12 | echo $x
x=12 ; echo $x
12.变量范围
x=123 局部
export Y=abc 全局
bash 新开启子shell环境
exit 返回原有shell环境
13.expr 计算并获取结果
+ - * / % 加,减,乘,除,取余
x=1;y=2
expr $[x+y]
14.条件语句
格式
if
then 语句
else 语句
if
#!/bin/bash
iftest()
{
dirpath="/usr/local/shelltest/funtest"
#注意if与[之间的空格
if [ -d $dirpath ]
then
echo $dirpath exist
else
mkdir $dirpath
fi
}
调用
iftest
15.循环语句
for循环
1.for x in list
do 语句
done
fortest()
{
names=$(cat /usr/local/shelltest/names.txt)
for name in $names
do
echo $name
done
}
调用
fortest
提示: for param in $* 表示循环所有输入参数,“$*”加双引号,所有的参数将合成一个,比如输入 a b将合成ab
$@同 $*,不过"$@"加双引号,还是循环所有参数,不会合成一个
2.for((i=1;i<=index;i++))
do 语句
done
#!/bin/bash
#定义sum函数 function也可以去掉,建议加上
function sum(){
#$1 表示第一个参数
index=$1
sum=0
for((i=1;i<=index;i++))
do
sum=$[$sum+$i]
done
echo $sum
}
#调用函数
sum $1
while循环
whiletest()
{
a=1
#注意while与[直接的空格
while [ $a -le 10 ]
do
echo $a
let a++
done
}
whiletest
16.退出和继续
breaktest()
{
while read -p "请输入待累加的整数,输入0退出:" x
do
[ $x -eq 0 ] && break
sum=$[sum+x]
echo $sum
done
}
breaktest
continueTest()
{
a=0
#while与[要有空格
while [ $a -le 20 ]
do
let a++
#[与$ 0与]之间需要有空格
[ $[a%5] -ne 0 ] && continue
echo $a
done
}
continuTest
17.exit退出脚本
exit 默认返回0
也可以指定
exit 1001
18.case分支
caseTest()
{
read -p "请输入一个字符:" x
case "$x" in
[a-z]|[A-Z])
echo "$x属于字母" ;;
[0-9])
echo "$x属于数字" ;;
*)
echo "$x属于非字母或者是数字"
esac
}
#调用
caseTest
19.函数
vi function.sh
#!/bin/bash
#1.使用echo返回值
function sum1(){
sum=$[$1+$2]
echo $sum
}
total1=$(sum1 $1 $2)
echo $total1
#2.使用return返回值
function sum2(){
total2=$[$1+$2]
return $total2
}
sum2 $1 $2
#$?会出现取模的情况,建议不要使用$?,可以使用全局变量
echo "$?"
#3.使用全局变量
total3=0
function sum3(){
total3=$[$1+$2]
}
sum3 $1 $2
#$?会出现取模的情况,建议不要使用$?,可以使用全局变量
echo $total3