这个选项用于从标准输入管道读入新的密码。
使用 echo 方式来重置Linux 系统用户密码:
echo “新密码”|passwd --stdin 用户名
支持,可以使用$(())进行运算
```sh
# ✅
[ ./student.sh -ef ./soft ] && [ -L ./soft ] && echo yes || echo no
[ ./student.sh -ef ./hard ] && [ -L ./hard ] && echo yes || echo no
```
![image](https://github.com/xgqfrms/linux-shell-script-programming/assets/7291672/94ce2289-e74a-4f69-a33a-54dee716ae04)
xshell 连接的服务器,服务器是centos的
首先你要确定df -h输出的根分区是否为/dev/sda3,然后第二行最后的-f1是有空格的,应该为-f 1才对,不知道对你有没有帮助
查了一下, = 和==的作用一样,只要=左右有空格即可。自己试了一下也确实是这样
好吧,我知错了 ==两边也要用空格
第9行的if没有对应的fi。
#!/bin/bash
read -p "number1: " num1
read -p "number2: " num2
read -p "ope: " ope
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
then
test1=$(echo $num1 |sed 's/[0-9]//g')
test2=$(echo $num2 |sed 's/[0-9]//g')
else
echo "enter number is null,try again"
exit 12
fi
if [ -z "$test1" -a -z "$test2" ]
then
echo "Please enter a valid value"
exit 10
fi
if [ "$ope"=='+' ]
then
sum=$(( $num1 + $num2 ))
elif [ "$ope"=='-' ]
then
sum=$(( $num1 - $num2 ))
elif [ "$ope"=='*' ]
then
sum=$(( $num1 * $num2 ))
elif [ "$ope"=='/' ]
then
sum=$(( $num1 / $num2 ))
else
echo "Please enter a valid symbol"
exit 11
fi
echo "$num1 $ope $num2 = $sum"
个人认为:read命令后面的变量,属于赋值,所以不需要$()。其它的调用变量的命令,需要$()。
too many arguments的意思是:参数太多。line6表示:第六行。仔细看看你的脚本第六行,是不是有多余的符号把你的参数隔开了,使得参数看起来太多了。
这样看代码看不到你说的问题,你应该把报错也贴上的。
暂时看见有几个问题:
-n 与“num1” 中间要有空格。
== 两边要有空格
[ xxx ] 方括号里的判断要跟两个方括号之间有空格
除法那行不要带双引号
最后一行只要在两边加双引号就够了,不要写那么多双引号
可能还有漏看的。。。
下面是我写的拆解过if结构的
#!/bin/bash # 例子:计算器 read -t 30 -p "input num1:" num1 read -t 30 -p "input num2:" num2 read -t 30 -p "input ope(+-*/):" ope if [ -n "$num1" -a -n "$num2" -a -n "$ope" ] then test1=$(echo $num1 | sed 's/[0-9]//g') test2=$(echo $num2 | sed 's/[0-9]//g') if [ -z "$test1" -a -z "$test2" ] then echo "check ok " else echo "error input" exit 10 fi else echo "num1,num2,ope must be not null" exit 11 fi # 开始计算 if [ "$ope" == "+" ] then res=$(($num1+$num2)) elif [ "$ope" == "-" ] then res=$(($num1-$num2)) elif [ "$ope" == "*" ] then res=$(($num1*$num2)) elif [ "$ope" == "/" ] then res=$(($num1/$num2)) else echo "ope error" fi echo "res:$res"
赋值时不用加,调用时需要加
sum = $(($num1+$num2)),=前后不能有空格吧,得是sum=$(($num1+$num2))
user 包含匹配 输出两个结果;要想输出一个 用界定符 "\bUSER\b"
if ["$ope"=="+"];then 这里的应该这样 if [ "$ope" == "+" ] ;then
明白了吗,2个等号旁边要有空格,2个中括号跟双引号的内容之间也要有空格,目前发现这个问题
后面缺个空格
变量num是你要创建的用户个数,在for循环中,需要调用变量i来控制执行次数,你调用了变量num
赶紧登陆root账号再新建回来
呃&aa和&bb没有讲过呢,$aa应该就对了吧
看下符号“&”,获取变量值要用“$”
这样也可以。你也可以这样 check=$(netstat -an | grep :80)就可以了。
一个一个判断没必要把if都套起来吧,可以拆开来写,一层层的if强迫症看着难受。