shell编程1

第一个shell脚本

#!/bin/bash
#首行声明使用的解析器
#新建用户账户
useradd zqhzqh
#设定登陆密码
passwd zqhzqh

运行脚本的两种方式

1.    sh  sh脚本路径

2.    先使用  chmod +x sh脚本路径  添加脚本的运行权限,然后直接输入sh脚本路径就能直接运行了

调试shell脚本

使用 sh -x sh脚本路径

使用echo和管道免去交互,使用

2> /tmp/err.log存放报错信息
&> /dev/null 可以抛弃显示的信息
复制代码
#!/bin/bash
#首行声明使用的解析器
#新建用户账号
echo '1.创建名为zqhzqh的用户账号'
#2> /tmp/err.log可以把那条语句运行的报错信息存放到err.log

#echo root密码通过管道|进行输入,免除键盘输入
echo a*1 | sudo useradd zqhzqh  #2> /tmp/err.log
echo '2.为新用户设置好密码'
sudo passwd zqhzqh #&> /dev/null 可以抛弃显示的信息
复制代码

 

 

 

 

管道示例

find /etc -type f | wc -l
lspci | grep -i vga

重定向输出,用于输出到文件

记录报错的信息

 

 

 

变量

环境变量

 

PWD:当前的文件夹路径

PATH:运行程序时默认去哪些路径的文件夹下面找程序来运行

USER:记录用户名称

位置参数

 

传入10个参数,显示第一个和第十个

 

#!/bin/bash
echo ${1}  #输出传入的第一个参数
echo ${2}  #输出传入的第二个参数

dell@dell:/home/sda/zqh/linux$ ./first.sh sadsa rrrr

预定义变量

 定义变量相关

#!/bin/bash
#重要,shell脚本中等号两边不能有空余的空格
ssdc=5 #定义变量
echo $ssdc #读取变量
echo ${ssdc}1 #加上括号防止冲突
unset ssdc #消除变量
echo $ssdc

字符串操作

复制代码
#!/bin/bash
#重要,shell脚本中等号两边不能有空余的空格
str1='zhangsan'
str2="ct"
str3="use ${str1}"  #双引号定义时可以借用变量
str4='use ${str1}'  #使用单引号定义时不能借用变量
str5='use '${str1}''  #使用两个单引号可以借用变量
echo ${str1}
echo ${str2}
echo ${str3}
echo ${str4}
echo ${str5}

echo "字符串的长度 ${#str1}" 
echo "字符串截取 ${str1:2:3}" #从第二位开始截取三位
复制代码

数组操作

#!/bin/bash
#shell只支持一维数组
list=("a1" "a2" "a3" "dsadsad")
echo ${list[3]} #显示list的第三位
echo ${list[@]} #显示整个list
echo ${#list[3]} #显示list第三位的长度
echo ${#list[@]} #显示整个list的size

用于整型数字判断的逻辑运算符

复制代码
#!/bin/bash
a=10
b=20
echo $a + $b #直接echo是无法进行正常的数学运算的

#注意expr后空格,运算符左右也要空格
echo `expr $a + $b` #进行数学运算时需要使用`expr 表达式`
echo `expr $a - $b`
echo `expr $a \* $b` #乘号左边要加\
echo `expr $a / $b`

#以下为逻辑运算符,用于整型数字的比较
#注意if的中括号左右要空格
if [ $a -eq $b ] #-eq来判别相等,equal
then
    echo "a等于b"
else 
    echo "a不等于b"
fi

if [ $a -ne $b ] #-ne来判别不相等
then
    echo "a不等于b"
else 
    echo "a等于b"
fi

if [ $a -gt $b ] #判别是否大于
then
    echo "a大于b"
else 
    echo "a小于b"
fi

#类似上面的,还有lt是小于,ge是大于等于,le是小于等于
#&& 逻辑的AND
#||逻辑的OR #
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式 #-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
复制代码

用于字符串判断的逻辑运算符

复制代码
#!/bin/bash
a='abcd'
b='efgh'
#检测两个字符串是否相等,相等则返回true

if [ $a = $b ]
then
    echo 'true'
else
    echo 'false'
fi

#检测两个字符串是否相等,不相等返回true
if [ $a != $b ]
then
    echo 'true'
else
    echo 'false'
fi

#检测字符串长度是否为0,为0返回true
if [ -n $a]
then
    echo 'true'
else
    echo 'false'
fi

#检测字符串是否为空,不为空返回true
if [ $a ]
then
    echo 'true'
else
    echo 'false'
fi
复制代码

用于文件判断的逻辑运算符

 echo使用

复制代码
#!/bin/bash
echo "dsadsadasd" #普通地显示字符串
echo "\"casdsa\"" #为正常显示"和*这类地符号需要在前面加上\

#echo 的-n参数可以设置不换行的输出,默认是会换行的
echo -n "OK"
echo -n "Hello"
echo ""

#echo 的-e参数,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出
# \a 发出警告声;
# \b 删除前一个字符;
# \c 最后不加上换行符号;
# \f 换行但光标仍旧停留在原来的位置;
# \n 换行且光标移至行首;
# \r 光标移至行首,但不换行;
# \t 插入tab;
# \v 与\f相同;
# \\ 插入\字符;
echo -e "\a dsadd"

#使用单引号原样输出字符串,不能借用其他的变量
echo 'oring'

#显示命令执行结果
echo `date`
复制代码

if语句的使用写法

复制代码
#!/bin/bash

a=10
b=20
if [ $a == $b ]
then 
    echo "a 等于 b"
elif [ $a -gt $b ]
then
    echo "a 大于 b"
else
    echo "a 小于 b"

fi
复制代码

数据输入

#!/bin/bash
#加-p可以设置提示语,加上-t可以设置多少秒后失效
echo "please enter num" read a echo $a

case语句的使用和写法

复制代码
#!/bin/bash
echo "pls input num 1..4"
read num
case $num in
    1) echo "1"
        ;;
    2) echo "2"
        ;;
    3|4) echo "3 or 4"
        ;;
    *) echo "没输入1-4之间的数字"
        ;;
esac
复制代码

for语句的写法

复制代码
#!/bin/bash

echo "第一种循环的写法"
for i in {1..5}
do 
    echo $i
done

echo "第二种循环的写法"
for num in 1 2 3 4 5
do
    echo $num
done

echo "第三种循环的写法"
list=("1" "2" "3" "4" "5")
for str in ${list[@]}
do
    echo $str
done

echo "第四种循环的写法"
for((i=1;i<=5;i++))
do
    echo $i
done
复制代码

while语句的使用

复制代码
#!/bin/bash

i=1
sum=0
while [ $i -le 100 ] #i小于等于100时一直执行
do
    echo $i
    let sum=sum+i  #使用表达式的时候前面加上let
    let i=i+1
done
echo $sum
复制代码

函数的使用

复制代码
#!/bin/bash

#简单的函数
user()  {
            echo "调用函数"
        }

user #调用函数

#带返回值的函数
func1() {
            echo "带返回值的函数"
            return 100  #return后跟数值0-255
        }
func1
echo "执行上一条命令的返回值为 $?"

#带传入参数的函数
func2() {
            echo "第一个参数为 $1 !"
            echo "第二个参数为 $2 !"
            echo "第十个参数为 ${10} !"
            echo "第十一个参数为 ${11} !"
            echo "参数总数有 $# 个!"
            echo "作为一个字符串输出所有参数 $* !"
        }
func2 1 2 3 4 5 6 7 8 9 10

#函数与命令的执行结果可以作为条件语句使用。
#要注意的是,和 C 语言不同,shell 语言中 0 代表 true0 以外的值代表 falsefunction demoFun1(){
        return 0
    }

function demoFun2(){
        return 12
    }

if demoFun1
then
    echo true
else
    echo false
fi

if demoFun2
then
    echo true
else
    echo false
fi
复制代码

开机执行脚本

 定时任务

 

 计算操作

复制代码
#!/bin/bash

num=5

#使用双小括号来完成
num=$((num+5))
num=$((num*2))
echo $num

#使用let来完成
num2=5
let num2=num2+5
let num2=num2*2
echo $num2
复制代码

计算的方法

复制代码
#!/bin/bash

num=5

#使用双小括号来完成
num=$((num+5))
num=$((num*2))
echo $num

#使用let来完成
num2=5
let num2=num2+5
let num2=num2*2
echo $num2

#使用expr完成
num3=5
num3=`expr $num3 + 5`
num3=`expr $num3 \* 2`
echo $num3
复制代码

 test使用详细

 

 

 

posted @   克莱比-Kirby  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示