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 代表 true,0 以外的值代表 false。 function 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使用详细
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律